Append to same line in Bash

前端 未结 4 1956
一个人的身影
一个人的身影 2021-02-20 06:50

The file letters.csv contains:

b,a,c,

The file numbers.csv contains:

32
34
25
13

I would like to append numbe

相关标签:
4条回答
  • 2021-02-20 07:25
    awk 'FNR==NR{t=$0;next}{s=s","$0}END{print t s}' letters.csv numbers.csv 
    
    0 讨论(0)
  • 2021-02-20 07:28

    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.

    0 讨论(0)
  • 2021-02-20 07:34

    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
    
    0 讨论(0)
  • 2021-02-20 07:39

    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
    
    0 讨论(0)
提交回复
热议问题