2012-03-06 112 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

相关问题