附加到Bash中的同一行 [英] Append to same line in 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 modifysed
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 differentsed
versions.这篇关于附加到Bash中的同一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!