连接线

时间:2015-05-31 18:53:28

标签: awk sed

我需要将文件中的所有其他行加入其后的行。

1, 2
3, 4
5, 6
7, 8
9, 10
11, 12

输出应该是:

1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

我使用过awk '{getline b;printf("%s,%s\n",$0,b)}' file。但是,输出是:

1, 2
,3, 4
5, 6
,7, 8
9, 10
,11, 12

我想知道每条线如何与它之后的线连接。

4 个答案:

答案 0 :(得分:3)

$ awk '{a=$0; getline; print a", "$0}' file
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

如何运作

  • a=$0

    这会将当前行保存在变量a

  • getline

    这会将下一行读入$0

  • print a", "$0

    它们并排打印它们之间的逗号。

答案 1 :(得分:2)

您可以使用

sed 'N;s/\n/, /' file

这个N附加下一行,s命令用逗号和空格替换换行符。

输出结果为:

1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

答案 2 :(得分:1)

使用$ awk 'ORS=NR%2?", ":RS' file 1, 2, 3, 4 5, 6, 7, 8 9, 10, 11, 12 执行此操作的经典和惯用方法如下:

ORS=NR%2?", ":RS

这基于Idiomatic awk中的示例,其工作原理如下:

  • {{1}}将输出记录分隔符设置为“,”或新行,具体取决于我们考虑的行:
    • 如果记录数是奇数,则将其设置为“,”。
    • 否则,到RS,默认为新行。

答案 3 :(得分:0)

以下也将诀窍
 paste -s -d ',\n'档案