我有两个行数和行数相同的文件。我想使用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
答案 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