Skip to content
Advertisement

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.

Advertisement

Answer

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.

Advertisement