我有一个制表符分隔文件,想要修改它。最后一列是以管道分隔的,我想将该列拆分(从管道到选项卡),同时避免使用管道拆分其他列。
这可以将管道转换为制表符,但我无法让它只在选定的列上进行拆分13.有没有办法让这个工作只在最后一列而不必指定它?
awk -F'|' '$13=$13' OFS="\t" inputfile.tsv > split.tsv
答案 0 :(得分:3)
让我们考虑这个制表符分隔的测试文件:
$ cat file
a|b c|d e|f g
one two three four
分解|
上的第三列:
$ awk -F'\t' '{gsub(/[|]/, "\t", $3)} 1' OFS='\t' file
a|b c|d e f g
one two three four
对于您的文件,您需要将$3
替换为$13
。
awk -F'\t' '{gsub(/[|]/, "\t", $13)} 1' OFS='\t' file
或者,要替换最后一列,无论它是什么列,请使用:
awk -F'\t' '{gsub(/[|]/, "\t", $NF)} 1' OFS='\t' file
-F'\t'
在输入标签上设置字段分隔符。
gsub(/[|]/, "\t", $13)
使用字段|
中的标签替换$13
。
1
是awk用于打印线的神秘短手。
OFS='\t'
告诉awk使用标签作为输出的字段分隔符。
如果\t
仅编码一次而不是三次,则可能更清晰,更容易维护。在这种情况下(帽子提示:Ed Morton):
awk 'BEGIN{FS=OFS="\t"} {gsub(/[|]/, OFS, $NF)} 1' file