文件1中的列总和与文件2中的列总和之间的差异

时间:2013-12-01 07:57:30

标签: linux unix

我有这个输入

file 1        file 2
A 10             222      77.11    11
B 20             2222     1.215    22
C 30            22222     12.021   33
D 40            222222   145.00    44 

我需要的输出是(11+22+33+44)- (10+20+30+40) = 110-100=10   提前感谢您的帮助

2 个答案:

答案 0 :(得分:3)

使用awk

$ cat test.txt
file 1        file 2
A 10             222      77.11    11
B 20             2222     1.215    22
C 30            22222     12.021   33
D 40            222222   145.00    44 
$ tail -n +2 test.txt | awk '{s += $5 - $2} END {print s}'
10

答案 1 :(得分:3)

你走了:

paste file1.txt file2.txt | awk '{s1+=$5; s2+=$2} END {print s1-s2}'

或者更好(聪明的@fattru的回答是用单个变量求和):

paste file1.txt file2.txt | awk '{sum+=$5-$2} END {print sum}'

如果你想在file1中使用 N 列,在file2中使用 M 列,这可能会“更容易”,但效率会降低:

paste <(awk '{print $N}' file1) <(awk '{print $M}' file2.txt) | awk '{sum+=$2-$1} END {print sum}'

在某种意义上,您不必在第二个文件中计算列的正确位置,但由于添加了额外的awk子流程,效率会降低。