我有以下多行数据:
foo
bar
qux
zuu
sdf
sdfasdf
我想做的是将它们转换为一个逗号分隔的行:
foo,bar,qux,zuu,sdf,sdfasdf
最好的Unix单行命令是什么?
使用粘贴命令:
paste -d, -s file
\n
)转换为逗号的情况,但似乎如果需要将换行符转换为“,
”,以满足许多其他命令的要求,则无法使用此方法。 - CoderGuy123-
字符从管道中读取输入。例如:echo -e "1\n2\n3" | paste -d, -s -
- Carson Andersonaaa
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
awk '{printf NR==1?$0:","$0}' file
- Chris Seymourprintf $0
,否则会产生难以理解的错误。printf的概要是printf格式,数据
,所以应该使用printf“%s”,$0
代替。 - Ed Mortonxargs -a your_file | sed 's/ /,/g'
这是一种更简短的方法。
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
awk '$1=$1' RS= OFS=, file
。 - Chris Seymour-v RS=
而不是 -vRS=
。 - Ed Morton-v
。 - KentPerl一行代码:
perl -pe'chomp, s/$/,/ unless eof' file
perl '-peeof||chomp&&s/$/,/' file
perl '-peeof||s|$/$|,|' file
- sid_comperl -pe 'eof or s#\n$#,#' thing
- protistsed -n 's/.*/&,/;H;$x;$s/,\n/,/g;$s/\n\(.*\)/\1/;$s/\(.*\),/\1/;$p'
perl -pi.bak -e 'unless(eof){s/\n/,/g}' your_file
\r
。您可以通过将输入导入到hd
或hexdump
中来检查它。\r
会(与\n
一起)生成两个字节的序列0a0d
。使用|sed 's/\r//g'
命令进行修复。 - valid