我想在一個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
我想在一個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
爲什麼你有美元在你的FS
?
我不認爲你目前的FS
甚至可以工作。 ...刪除$
,它應該沒問題。
爲主導空的原因:
與您當前的FS,$\t
意味着行結束後一個標籤。這將不會匹配。也就是說,經過awk處理後,文件的每一行只有一個字段。只有$0 and $1
根本沒有$2
。所以$ 2是空的。
你做了交換,實際上你只需在你的原始行添加一個空字段。而且因爲你重置了一個字段($ 1和$ 2),所以當你打印$ 0時,awk將在行上應用OFS,在你的情況下,OFS是默認的空間。所以,awk將打印:
$2<space>$1
請記住,$ 2是空的,$ 1實際上是您的$ 0。
它是由FS
設置爲錯誤的值造成的。您需要FS="\t"
。
你能顯示你的輸入文件嗎? – Kent
爲什麼不只是'BEGIN {FS = OFS =「\ t」} {print $ 2,$ 1}'? –