2012-03-06 110 views
1

我想在第一列之後以及在每行有不同字段數的文件的所有行的最後一列之前插入一個逗號。在第一列之後和最後一列之前插入一個逗號

E.g.這是文件:

test1 test2 test3 
test1 test2 test3 test4 test5 test6 
test1 test2 test3 test4 
test1 test2 test3 test4 test5 

我想使它看起來像:

test1, test2, test3 
test1, test2 test3 test4 test5, test6 
test1, test2 test3, test4 
test1, test2 test3 test4, test5 

我是個試圖像下面的東西,但它不工作(無論是語法錯誤或沒有預期的輸出):

awk '{NF=NF-1;for (i=NF; i==NF; i--) $i="," print $NF }' my_file1 
+0

分號失蹤 – 2012-03-06 08:29:36

回答

3

您不需要for -loop。你只是在改變兩個領域。

我找換行(和其它空格)可以使awk(和其他語言)一大堆更具可讀性:

% awk '{ 
    $1 = $1"," 
    $(NF - 1) = $(NF - 1)"," 
    print 
} 
' my_file1 
test1, test2, test3 
test1, test2 test3 test4 test5, test6 
test1, test2 test3, test4 
test1, test2 test3 test4, test5 
+0

等等...什麼?你發佈我的解決方案添加空格? – 2012-03-06 08:48:23

+0

@ KarolyHorvath:我是一個打字速度較慢的人(在發帖前我正在測試我的答案)。當我看到它時(我開始時它不在那裏),我也投了票。失蹤的'''在哪裏? – Johnsyweb 2012-03-06 08:51:45

+1

它在那裏,只是不在我預期的範圍內。 srry。 – 2012-03-06 08:52:42

3
awk '{ $1=$1","; $(NF-1)=$(NF-1)","; print }' 

注意:如果NF = 2這會第一場,這是符合你的要求,但可能後插入兩個逗號不是你真正想要的。如果你想處理它只需添加一個額外的if

+0

這正是我所需要的。感謝Karoly的快速反應。 – slayedbylucifer 2012-03-06 08:36:50

+0

同意...謝謝。 – slayedbylucifer 2012-03-06 08:59:29

2

如果你有興趣在一個sed答案:sed -e 's/ /, /' -e 's/\(.*\) /\1, /'

+0

只要在最後一個值之後沒有空白,它就可以工作。如果最後有空白,試試'sed's/\(。* \)\(\ S \)/,\ 1,\ 2 /'' – potong 2012-03-06 19:57:46

相關問題