Unix 多行到单行

Unix 多行到单行,unix,awk,sed,text-processing,Unix,Awk,Sed,Text Processing,输入 里科 澳大利亚地址 24岁 名字里加 亚洲演讲 25岁 输出 姓名Rico,地址澳大利亚,24岁 姓名,地址,亚洲,25岁 我们可以在Unix中执行此操作吗?您可以使用awk将多行转换为单行 #!/usr/bin/awk # table.awk { if (NR == 1) { printf("%s",$0); } else { printf(",%s",$0); } } $cat input.csv Name Rico Addr

输入 里科

澳大利亚地址

24岁

名字里加

亚洲演讲

25岁

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

姓名,地址,亚洲,25岁


我们可以在Unix中执行此操作吗?

您可以使用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
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
Name Rico,Address Australia,Age 24,Name Rica,Address Asia,Age 25
Stackoverflow中有更有效的答案,如下所示:


这里是另一个选择

paste -sd, inputfile
对于sed:

sed ':a;N;$!ba;s/\n/, /g' filename
我找到了解决办法:

awk'BEGIN{RS=;FS=\n};{打印$1,$2}文件


这会将输入记录分隔符设置为空行,或将此问题设置为连续的空行,因为下一条记录将是下一条非空行。这还将字段分隔符设置为nextline

是的,那是微不足道的。看看是否有后续问题。欢迎来到StackOverflow。请参加,学习提出好问题stackoverflow.com/help/how-to-ask,做一个回答。MCVE应包括说明所有方面和所需输出的各种样本输入。你也应该表现出你为自己付出的努力。您可能已经注意到StackOverflow阅读器对作为免费编码服务使用的印象不太满意。是否要将所有行合并为一行?您的样品输入和输出似乎表明了这一点。您不希望只包含一组行名称…/地址…/年龄?对于单个文件,NR==FNR始终为真input@karakfa谢谢你,卡拉卡法。我考虑了一会儿。在这种情况下,没有必要使用FNR。