Search code examples
linuxbashunixshellmath

BASH: how to perform arithmetic on numbers in a pipe


I am getting a stream of numbers in a pipe, and would like to perform some operations before passing them on to the next section, but I'm a little lost about how I would go about it without breaking the pipe.

for example

> echo "1 2 3 4 5" | some command | cat 
1 4 9 16 25
>

Would you have any ideas on how to make something like this work? The actual operation I want to perform is simply adding one to every number.


Solution

  • echo 1 2 3 4 5|{
      read line; 
      for i in $line;
      do
        echo -n "$((i * i)) "; 
      done; 
      echo
    }
    

    The {} creates a grouping. You could instead create a script for that.