本文介绍了在 Bash 中追加到同一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

letters.csv 文件包含:

The file letters.csv contains:

b,a,c,

文件 numbers.csv 包含:

The file numbers.csv contains:

32
34
25
13

我想像这样将 numbers.csv 附加到 letters.csv:

I would like to append numbers.csv to letters.csv like this:

b,a,c,32,34,25,13

我已经试过了:

sed -e :a -e '{N; s/\n/,/g; ta}' numbers.csv >> letters.csv

然而,这会将附加的条目放在一个新行上:

However, this puts the appended entries on a new line:

b,a,c,
32,34,25,13

我希望所有条目都在同一行上.这怎么办?

I would like all entries on the same line. How can this be done?

推荐答案

您可以单独使用 paste.

首先,将numbers.csv中的内容转换为逗号分隔的值.-s 是串行选项,-d, 指定逗号作为分隔符:

First, convert contents in numbers.csv to comma-separated values. -s is the serial option and -d, specifies comma as delimiter:

$ paste -sd, numbers.csv
32,34,25,13

然后通过指定空分隔符和 进程替换,将此输出附加到 letters.csv:

Then append this output to letters.csv by specifying an empty delimiter and process substitution:

$ # 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 命令,请使用 命令替换:

$ 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

这篇关于在 Bash 中追加到同一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-24 18:44