← Back to context

Comment by pwg

11 years ago

One use is converting columns of numbers into math strings for bc.

Example (contrived):

    $ seq 10 20 | paste -s -d +
    10+11+12+13+14+15+16+17+18+19+20

    $ seq 10 20 | paste -s -d + | bc
    165

Or converting columns of strings into regex 'or' clauses for searching (contrived example again):

    $ cut -f 3 -d , something.csv | paste -s -d "|"
    a|b|c|d|e|f

    $ egrep "$(cut -f 3 -d , something.csv | paste -s -d "|")" another_file
    ... result lines appear here ...

I've used paste all my life, but I never knew you could do

  paste - -

to convert stdin into 2 columns (or "paste - - - -" to get 4 columns!). TIL ...

seq has the -s flag which voids the need of the paste for that command:

  $ seq -s + 10 20
  10+11+12+13+14+15+16+17+18+19+20

But I agree that the paste is very useful.

  # a few random samples for an IN SQL statement
  $ shuf -i 1-500000 -n 5 | paste -s -d ,
  371492,250061,266669,455846,295852

  # we can even get PI
  $ ( seq -s + -f '4/%g' 1 4 100000 && seq -s - -f '4/%g' 3 4 100000 ) | paste -s -d - | bc -l
  3.14157265358979523735

  • There is a faster way to get pi in bc:

      echo '4*a(1)' | bc -l
    

    (That is, 4×arctan(1)=4×π/4=π.) But your way is truly an awesome use of Unix!