我应该使用哪个命令来对两个特定列的值求和?例如,我有文件:
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 吗?我找到了很多例子来总结整个专栏......
尝试:
awk '{print $0, $2 + $NF }' input_file
由于您标记了问题bash
(awk
是最合适的工具!)
#!/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
这是完成您想要的命令:
awk '{$(NF+1)=$NF+$2}1' <filename
对于简单的计算awk
是要走的路。在更复杂的情况下,您可能想要并行化操作,您可以使用 GNU 并行和您选择的计算器来执行此操作。
与bash
:
<infile parallel --colsep ' +' echo '{}' '$(( {2} + {4} ))
bash
和bc
:_
<infile parallel --colsep ' +' echo '{}' '$(bc <<< "{2} + {4}")'
请注意,当前版本parallel
没有一个简单的方法来引用输入的最后一个元素,但是,现在开发分支中有一个补丁允许对元素进行负索引,即您可以使用{-1}
而不是{4}
.