2013-03-19 78 views
3

我用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 

但是,修改后的行由空格隔开,即使“\ t”的指定-F:

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 

我怎样才能让修改后的行由标签分隔?

回答

4

您应该设置

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

+1

+1,这就是要点! – Kent 2013-03-19 13:50:25

+1

很好,谢谢! – 2013-03-19 13:54:17

+0

我把这意味着设置一个环境变量'OFS =“\ t”',这对我没有任何作用。我应该仔细阅读。 – tremby 2014-10-31 21:07:50

相关问题