bash命令用于汇总和打印列的每个元素并打印新列

时间:2013-02-12 12:25:04

标签: bash sed awk bc

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

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吗? 我找到了许多例子来总结整个专栏......

4 个答案:

答案 0 :(得分:6)

尝试:

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

答案 1 :(得分:4)

由于您标记了问题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

答案 2 :(得分:1)

这是完成你想要的命令:

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

答案 3 :(得分:1)

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

使用bash

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

bashbc

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

注意,parallel的当前版本没有简单的方法来引用输入的最后一个元素,但是,现在开发分支中的补丁允许对元素进行负索引,即然后就可以使用{-1}代替{4}