我在多行中有以下数据:
foo
bar
qux
zuu
sdf
sdfasdf
我想要做的是将它们转换为一个逗号分隔的行:
foo,bar,qux,zuu,sdf,sdfasdf
什么是最好的unix单线做到这一点?
使用粘贴命令:
paste -d, -s file
aaa
bbb
ccc
ddd
cat file | xargs
aaa bbb ccc ddd
cat file | xargs | sed -e 's/ /,/g'
aaa,bbb,ccc,ddd
有很多方法可以实现。您使用的工具主要取决于您自己的偏好或经验。
使用 tr 命令:
tr '\n' ',' < somefile
使用 awk:
awk -F'\n' '{if(NR == 1) {printf $0} else {printf ","$0}}' somefile
xargs -a your_file | sed 's/ /,/g'
这是一种较短的方式。
根据您的输入示例,此 awk 行有效。(没有尾随逗号)
awk -vRS="" -vOFS=',' '$1=$1' file
测试:
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
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
这将创建一个扩展名为 .bak 的原始文件的备份,然后修改原始文件