用逗号分隔多行代码(Perl / Sed / AWK)

我有多行中的以下数据:

foo bar qux zuu sdf sdfasdf 

我想要做的就是用一行和逗号分隔来转换它们:

 foo,bar,qux,zuu,sdf,sdfasdf 

什么是最好的unix单线程来做到这一点?

使用粘贴命令:

 paste -d, -s file 

文件

 aaa bbb ccc ddd 

xargs的

 cat file | xargs 

结果

 aaa bbb ccc ddd 

xargs改进

 cat file | xargs | sed -e 's/ /,/g' 

结果

 aaa,bbb,ccc,ddd 

xargs -a your_file | sed 's/ /,/g'

这是更短的方式

根据你的input例子,这个awk行可以工作。 (没有尾随逗号)

 awk -vRS="" -vOFS=',' '$1=$1' file 

testing:

 kent$ echo "foo bar qux zuu sdf sdfasdf"|awk -vRS="" -vOFS=',' '$1=$1' foo,bar,qux,zuu,sdf,sdfasdf 

Perl一行:

 perl -pe'chomp, s/$/,/ unless eof' file 

或者,如果你想更加神秘:

 perl '-peeof||chomp&&s/$/,/' file 

有很多方法可以实现。 您使用的工具主要取决于您自己的偏好或经验。

使用tr命令:

 tr '\n' ',' < somefile 

使用awk:

 awk -F'\n' '{if(NR == 1) {printf $0} else {printf ","$0}}' somefile 
 sed -n 's/.*/&,/;H;$x;$s/,\n/,/g;$s/\n\(.*\)/\1/;$s/\(.*\),/\1/;$p' 
 perl -pi.bak -e 'unless(eof){s/\n/,/g}' your_file 

这将创build具有.bak扩展名的原始文件的备份,然后修改原始文件