2013-03-19 33 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

相關問題