2013-07-11 80 views
2

我想在一個CSV文件交換兩列,我使用這個:awk中被插入空格

#!/usr/bin/awk -f 

BEGIN {FS="$\t"} 
{temp=$1; $1=$2; $2=temp}{print$0} 

偉大的工程,但它是在該行的開頭添加一個額外的空格。我怎樣才能防止這一點?

我輸入文件看起來像這樣

1\t2 
3\t4 

我能得到什麼看起來像這樣:

2\t1 
3\t4 
+0

你能顯示你的輸入文件嗎? – Kent

+0

爲什麼不只是'BEGIN {FS = OFS =「\ t」} {print $ 2,$ 1}'? –

回答

3

爲什麼你有美元在你的FS

我不認爲你目前的FS甚至可以工作。 ...刪除$,它應該沒問題。

爲主導空的原因:

與您當前的FS,$\t意味着行結束後一個標籤。這將不會匹配。也就是說,經過awk處理後,文件的每一行只有一個字段。只有$0 and $1根本沒有$2。所以$ 2是空的。

你做了交換,實際上你只需在你的原始行添加一個空字段。而且因爲你重置了一個字段($ 1和$ 2),所以當你打印$ 0時,awk將在行上應用OFS,在你的情況下,OFS是默認的空間。所以,awk將打印:

$2<space>$1 

請記住,$ 2是空的,$ 1實際上是您的$ 0。

2

它是由FS設置爲錯誤的值造成的。您需要FS="\t"