4

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

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

4 回答 4

6

尝试:

awk '{print $0, $2 + $NF }' input_file
于 2013-02-12T12:33:38.343 回答
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
于 2013-02-12T12:42:05.967 回答
1

这是完成您想要的命令:

awk '{$(NF+1)=$NF+$2}1' <filename
于 2013-02-12T12:32:08.360 回答
1

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

bash

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

bashbc:_

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

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

于 2013-02-13T08:54:37.133 回答