在Bash中附加到同一行

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)

我希望所有条目都在同一条线上.如何才能做到这一点?

Sun*_*eep 7

你可以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)


要修改sedOP中发布的命令,请使用命令替换:

$ 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)


pfn*_*sel 5

你可以使用tr:

cat letters.csv numbers.csv | tr '\n' ',' | sed 's/,$/\n/'
Run Code Online (Sandbox Code Playgroud)

(我希望这不是无用的cat.:-))

sed在年底需要替换最后,一个换行符.

  • 好的,可以添加`| sed's /,$/\n /'`删除尾随`,`并添加换行符:) (2认同)