【问题标题】:bash command to sum and print each element of a column and print a new columnbash 命令求和并打印列的每个元素并打印新列
【发布时间】:2013-01-27 18:10:34
【问题描述】:

我应该使用哪个命令来对两个特定列的值求和? 例如,我有文件:

1 4 5 1
2 3 5 2
7 8 6 3

我想将第二列和最后一列相加,得到以下结果

1 4 5 1 5
2 3 5 2 5
7 8 6 3 11

我应该使用 awk 和 bc 吗? 我找到了很多例子来总结整个专栏......

【问题讨论】:

    标签: bash sed awk bc


    【解决方案1】:

    对于简单的计算awk 是要走的路。在更复杂的情况下,您可能希望并行化操作,您可以使用 GNU 并行和您选择的计算器来执行此操作。

    bash:

    <infile parallel --colsep ' +' echo '{}' '$(( {2} + {4} ))
    

    使用bashbc

    <infile parallel --colsep ' +' echo '{}' '$(bc <<< "{2} + {4}")'
    

    注意,parallel 的当前版本没有一个简单的方法来引用输入的最后一个元素,但是,现在开发分支中的一个补丁允许元素的负索引,即你会能够使用{-1} 而不是{4}

    【讨论】:

      【解决方案2】:

      由于您标记了问题bashawk 是最合适的工具!)

      #!/bin/bash
      
      while read -a ARRAY
      do
          echo ${ARRAY[@]} $((${ARRAY[1]}+${ARRAY[3]}))
      done < input.txt
      

      输出:

      $ ./sum.sh 
      1 4 5 1 5
      2 3 5 2 5
      7 8 6 3 11
      

      【讨论】:

        【解决方案3】:

        试试:

        awk '{print $0, $2 + $NF }' input_file
        

        【讨论】:

          【解决方案4】:

          这里是完成你想要的命令:

          awk '{$(NF+1)=$NF+$2}1' <filename
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-16
            • 1970-01-01
            • 2022-01-04
            • 1970-01-01
            • 1970-01-01
            • 2018-01-16
            • 2016-03-27
            相关资源
            最近更新 更多