如何使awk gsub返回一个制表符分隔的行



我使用awk gsub来替换我的以制表符分隔的文件的特定列中的字符串:

cat test.txt 
1   1   2032    1
2   1   2032    2
3   1   999 3
4   1   2032    4
5   1   9999    5

但是,修改后的行用空格分隔,即使指定了-F "t":

awk -F "t" '{gsub(/^999$/,"XXX",$3);print}' test.txt
1   1   2032    1
2   1   2032    2
3 1 XXX 3
4   1   2032    4
5   1   9999    5

如何让修改后的行也用制表符分隔?

你应该设置

OFS="t"

:

awk -F "t" '{gsub(/^999$/, "XXX", $3); print}' OFS="t" test.txt

awk -F "t" -v OFS="t" '{gsub(/^999$/, "XXX", $3); print}' test.txt

awk 'BEGIN{OFS=FS="t"}{gsub(/^999$/, "XXX", $3); print}' OFS="t" test.txt

参见man awk

最新更新