附加到Bash中的同一行 [英] Append to same line in Bash

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

问题描述

档案letters.csv包含:

  b,a,c,



文件numbers.csv包含:

  32 
34
25
13

numbers.csv to letters.csv like this:

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



我尝试过:

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

但是,这会将附加的条目放在新行上:

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

我想在同一行上的所有条目。

解决方案

您可以使用粘贴



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

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

然后通过指定空分隔符和 letters.csv .wooledge.org / ProcessSubstitutionrel =nofollow noreferrer>过程替代

  $ 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 s / $ / $(sed -e:a -e'{N; s / \\\
/,/ g; ta}'numbers.csv)/letters.csv
$ cat letters.csv
b,a,c,32,34,25,13

请参阅 便携式使用 -i 选项用于不同的 sed 版本。


The file letters.csv contains:

b,a,c,

The file numbers.csv contains:

32
34
25
13

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

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

I have tried this:

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?

解决方案

You can do it with paste alone.

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

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

$ paste -d '' letters.csv <(paste -sd, numbers.csv) > tmp && mv tmp letters.csv
$ cat letters.csv
b,a,c,32,34,25,13


To modify sed command posted in OP, use 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

See Portable Use for usage of the -i option for different sed versions.

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆