BASH: how to perform arithmetic on numbers in a pipe

前端 未结 10 1974
忘掉有多难
忘掉有多难 2021-01-18 08:12

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

10条回答
  •  -上瘾入骨i
    2021-01-18 08:18

    I'd write:

    echo "1 2 3 4 5" | {
      for N in $(cat); do
        echo $((N ** 2))
      done | xargs
    }
    

    We can think of it as a "map" (functional programming). There are a lot of ways of writing a "map" function in bash (using stdin, function args, ...), for example:

    map_stdin() {
      local FUNCTION=$1
      while read LINE; do
        $FUNCTION $LINE
      done
    }
    
    square() { echo "$(($1 * $1))"; }
    
    $ echo "1 2 3 4 5" | xargs -n1 | map_stdin square | xargs
    1 4 9 16 25
    

提交回复
热议问题