Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

input_file (columns are tab delimited, only column 4 contains spaces)

input

A B C D;<>X;<>Y 0
C D E F;<>Z;<>X 1

output

A B C D;<>X;<>Y;<>apple=0
C D E F;<>Z;<>X;<>apple=1

I would like to merge the last column of input_file with the second last column and separate the value of last column with ";" and a tag "apple=" in second last column (just like in column number 4 of input_file). Hence that output_file has one less column. It is also necessary to keep the formatting output file to be intact.As all the columns are tab delimited, but the values in column 4 has spaces too (D;<>X;<>Y).

Hence I want to keep all the field separators of input file as such, just want to merge the value of last column in the second last with a tag (apple=). Thanks

share|improve this question
add comment

2 Answers 2

The easiest way is probably with awk:

awk 'BEGIN {FS=OFS="\t"} { $4 = $4 ";<>apple="$5; print $1, $2, $3, $4 }'

The BEGIN block ensures that tab is used as input field separator as well as output separator.

share|improve this answer
add comment

changing the last but one field and removing the last field:

$ awk '{$(NF-1)=$(NF-1)";<>apple="$NF;$NF="";}1' OFS="\t" file
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.