awk修改文件内容

时间:2016-02-22 10:24:18

标签: shell awk sed

我有一个文件,其标签'\t'像这样分开

8   263 722016-8-263-2016_02_07_03:00:18-544992 Text1   4
8       722016-8--2016_02_07_03:00:18-307392    Text2   1
8   220 722016-8-220-2016_02_07_03:00:18-488656 Text3   3
8   727 722016-8-727-2016_02_07_03:00:18-786195 Text4   1

我必须修改第3列的内容。我可以像第awk '{ print $3 }' file.txt一样获得第3列。

722016-8-263-2016_02_07_03:00:18-544992
Text2
722016-8-220-2016_02_07_03:00:18-488656 
722016-8-727-2016_02_07_03:00:18-786195

但是在第2行第2列缺失,我在输出中得到Text2而不是722016-8--2016_02_07_03:00:18-307392。所以我想从最后一列获得第3列并插入" Test1-"在该专栏的开头。上述文件的预期输出为 -

8   263 Test1-722016-8-263-2016_02_07_03:00:18-544992   Text1   4
8       Test1-722016-8--2016_02_07_03:00:18-307392      Text2   1
8   220 Test1-722016-8-220-2016_02_07_03:00:18-488656   Text3   3
8   727 Test1-722016-8-727-2016_02_07_03:00:18-786195   Text4   1

1 个答案:

答案 0 :(得分:2)

你可以使用这个awk:

awk 'BEGIN{FS=OFS="\t"} NF==4{$1=$1 "\t"} {$(NF-2) = "Test1-" $(NF-2)} 1' file

<强>输出:

8   263 Test1-722016-8-263-2016_02_07_03:00:18-544992   Text1   4
8       Test1-722016-8--2016_02_07_03:00:18-307392      Text2   1
8   220 Test1-722016-8-220-2016_02_07_03:00:18-488656   Text3   3
8   727 Test1-722016-8-727-2016_02_07_03:00:18-786195   Text4   1