我有这个输入
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
提前感谢您的帮助
答案 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
子流程,效率会降低。