如何使用shell从另一个文件中的相应条目中减去一个文件中的每个条目

时间:2015-08-03 02:03:03

标签: linux shell unix awk

我有两个行数和行数相同的文件。我想使用shell从另一个文件中的相应条目中减去一个文件中的每个条目。 e.g。

ifile1.txt      ifile2.txt    
3  5  2  2      1  2  1  3 
1  4  2  1      1  3  0  2 
4  6  5  2      2  5  5  1 
5  5  7  1      0  0  1  1   

ofile.txt i.e. (ifile1.txt - ifile2.txt)
2  3  1  -1
0  1  2  -1
2  1  0   1
5  5  6   0

我做的就像下面看起来非常手动,对于大量的行和列来说不是一个好主意。

paste ifile1.txt ifile2.txt > ifile3.txt
awk '{printf("%f %f %f %f\n", $1-$5, $2-$6, $3-$7, $4-$8);}' ifile3.txt > ofile.txt

1 个答案:

答案 0 :(得分:2)

要处理任意数量的列,您需要for循环:

$ awk '{n=NF/2; for (i=1;i<=n;i++) printf "%5.2f ", $i-$(i+n); print ""}' ifile3.txt
 2.00  3.00  1.00 -1.00 
 0.00  1.00  2.00 -1.00 
 2.00  1.00  0.00  1.00 
 5.00  5.00  6.00  0.00