Home > Software design >  How can I isolate a single value from a list within an awk field?
How can I isolate a single value from a list within an awk field?

Time:01-12

Lets say i have a file called test and in this file contains some data:

jon:TX:34:red,green,yellow,black,orange

I'm trying to make it so it will only print the 4th field up until the comma and nothing else. But I need to leave the current FS in place because the fields are separated by the ":". Hope this makes sense.

I have been running this command:

awk '{ FS=":"; print $4 }' /test

I want my output to look like this.

jon:TX:34:red

or if you could even just figure out how i could just print the 4th field would be a good help too

red

CodePudding user response:

It sounds like you are trying to extract the first field of the fourth field. Top level fields are delimited by ":" and the nested field is delimited by ",".

Combining two cut processes achieves this easily:

<input.txt cut -d: -f4 | cut -d, -f1

If you want all fields until the first comma, extract the first comma-delimited field without first cutting on colon:

cut -d, -f1 input.txt

CodePudding user response:

If any field can contain commas then cut is no good but you can use:

  • sed

    sed 's/,[^:]*$//'
    

    note: the regex works for the last :-delimited field only

  • awk

    awk -F ':' -v OFS=':' '{ sub(/,.*/,"",$4) } 1'
    
  • Related