letters.csv文件包含:
b,a,c,
文件numbers.csv包含:
32
34
25
13
我想将numbers.csv附加到letters.csv,如下所示:
b,a,c,32,34,25,13
我试过这个:
sed -e :a -e '{N; s/\n/,/g; ta}' numbers.csv >> letters.csv
但是,这会将附加的条目放在一个新行上:
b,a,c,
32,34,25,13
我希望所有条目都在同一条线上。怎么办呢?
答案 0 :(得分:7)
您可以单独使用paste
。
首先,将numbers.csv
中的内容转换为逗号分隔值。 -s
是串行选项,-d,
将逗号指定为分隔符:
$ paste -sd, numbers.csv
32,34,25,13
然后通过指定空分隔符和process substitution将此输出附加到letters.csv
:
$ # use -d'\0' for non-GNU version of paste
$ paste -d '' letters.csv <(paste -sd, numbers.csv) > tmp && mv tmp letters.csv
$ cat letters.csv
b,a,c,32,34,25,13
要修改OP中发布的sed
命令,请使用command substitution:
$ sed -i -e "s/$/$(sed -e :a -e '{N; s/\n/,/g; ta}' numbers.csv)/" letters.csv
$ cat letters.csv
b,a,c,32,34,25,13
答案 1 :(得分:5)
您可以使用tr
:
cat letters.csv numbers.csv | tr '\n' ',' | sed 's/,$/\n/'
(我希望这不是对cat
的无用的使用。: - ))
最后sed
需要用换行符替换最后,
。
答案 2 :(得分:3)
awk
救援!
$ awk 'NR==FNR{printf "%s",$0; next}
{print $0}
END{ORS="\n"; print ""}' letters ORS=, numbers |
sed '$s/,$//' # to delete last ","
b,a,c,32,34,25,13
答案 3 :(得分:2)
awk 'FNR==NR{t=$0;next}{s=s","$0}END{print t s}' letters.csv numbers.csv