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:
$ # 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
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
You can use tr
:
cat letters.csv numbers.csv | tr '\n' ',' | sed 's/,$/\n/'
(I hope this is not a useless use of cat
. :-))
The sed
at the end is needed to replace the last ,
with a newline character.
awk
to the rescue!
$ awk 'NR==FNR{printf "%s",$0; next}
{print $0}
END{ORS="\n"; print ""}' letters ORS=, numbers |
sed '$s/,$//' # to delete last ","
b,a,c,32,34,25,13
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With