Isl*_*rol 11 csv bash sed list append
letters.csv文件包含:
b,a,c,
Run Code Online (Sandbox Code Playgroud)
文件numbers.csv包含:
32
34
25
13
Run Code Online (Sandbox Code Playgroud)
我想将numbers.csv附加到letters.csv,如下所示:
b,a,c,32,34,25,13
Run Code Online (Sandbox Code Playgroud)
我试过这个:
sed -e :a -e '{N; s/\n/,/g; ta}' numbers.csv >> letters.csv
Run Code Online (Sandbox Code Playgroud)
但是,这会将附加的条目放在新行上:
b,a,c,
32,34,25,13
Run Code Online (Sandbox Code Playgroud)
我希望所有条目都在同一条线上.如何才能做到这一点?
你可以paste
单独做到这一点.
首先,将内容转换numbers.csv
为逗号分隔值.-s
是串行选项,并将-d,
逗号指定为分隔符:
$ paste -sd, numbers.csv
32,34,25,13
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
你可以使用tr
:
cat letters.csv numbers.csv | tr '\n' ',' | sed 's/,$/\n/'
Run Code Online (Sandbox Code Playgroud)
(我希望这不是无用的cat
.:-))
将sed
在年底需要替换最后,
一个换行符.