多行排成单行

时间:2017-05-15 00:24:35

标签: unix awk sed text-processing

输入 名字Rico

澳大利亚地址

24岁

姓名Rica

致辞亚洲

25岁

输出 姓名Rico,地址澳大利亚,24岁

姓名Rica,地址亚洲,25岁

我们可以在Unix中这样做吗?

4 个答案:

答案 0 :(得分:1)

使用sed:

sed ':a;N;$!ba;s/\n/, /g' filename

答案 1 :(得分:0)

您可以使用awk将多行转换为单行。

#!/usr/bin/awk
# table.awk

{
    if (NR == 1) {
        printf("%s",$0);
    } else {
        printf(",%s",$0);
    }
}

$ cat input.csv

Name Rico
Address Australia
Age 24
Name Rica
Address Asia
Age 25

$ awk -f table.awk input.csv

Name Rico,Address Australia,Age 24,Name Rica,Address Asia,Age 25

Stackoverflow中有更有效的答案,如下所示:

How to merge rows from the same column using unix tools

答案 2 :(得分:0)

这是另一种选择......

paste -sd, inputfile

答案 3 :(得分:0)

我找到了解决方案:

awk'BEGIN {RS =“”; FS = “\ n”}; {print $ 1,$ 2}' file

这会将输入记录分隔符设置为空行,或者将此事项设置为连续的空行,因为下一条记录将是下一个非空行。这也将字段分隔符设置为下一行。