如何将多行连接到一行,使用分隔符表示换行符,并避免使用尾随分隔符,并可选择忽略空行?
例.考虑一个文本文件foo.txt,有三行:
foo
bar
baz
所需的输出是:
foo,bar,baz
我现在使用的命令:
tr '\n' ',' <foo.txt |sed 's/,$//g'
理想情况下它会是这样的:
cat foo.txt |join ,
什么是:
当然我可以写一些东西,或者只是使用别名.但我很想知道这些选择.
Mic*_*ber 122
也许有点令人惊讶的paste是,这是一个很好的方法:
paste -s -d","
这不会处理你提到的空行.为此grep,首先管理您的文本:
grep -v '^$' | paste -s -d"," -
jay*_*ngh 12
这一sed行应该有效 -
sed -e :a -e 'N;s/\n/,/;ba' file
测试:
[jaypal:~/Temp] cat file
foo
bar
baz
[jaypal:~/Temp] sed -e :a -e 'N;s/\n/,/;ba' file
foo,bar,baz
要处理空行,您可以删除空行并将其管道传输到上面的单行.
sed -e '/^$/d' file | sed -e :a -e 'N;s/\n/,/;ba'
如何使用xargs?
为你的情况
$ cat foo.txt | sed 's/$/, /' | xargs
注意xargs命令的输入限制长度.(这意味着无法处理很长的输入文件.)
Perl的:
cat data.txt | perl -pe 'if(!eof){chomp;$_.=","}'
或者更短更快,令人惊讶的是:
cat data.txt | perl -pe 'if(!eof){s/\n/,/}'
或者,如果你想:
cat data.txt | perl -pe 's/\n/,/ unless eof'