仅针对偶数行从另一个文件中减去文件的特定列

仅针对偶数行从另一个文件中减去文件的特定列

我有两个具有重复一般结构的长文件,
File1:
AA 100
BB 10
File2:
AA 100
BB 1

我想从 File1 的 File2 的偶数行中减去第 2 列,但保留/打印其他信息,以便保留。
期望的输出:
AA 100
BB 9

为此我写了awk
awk '{a=$2;getline<f;$2-=a}!(NR % 2)' f=File1 File2

这会产生:
BB 9
哪个可以很好地进行减法并打印结果,但我在添加其他数据时遇到问题。

我怎样才能在减法的同时打印其他数据?

答案1

$ paste file1 file2 | awk '{print $1, $2 - (NR%2 ? 0 : $4)}'
AA 100
BB 9

或者如果您想要一个仅限 awk 的解决方案:

$ awk 'NR==FNR{if (!(NR%2)) a[NR]=$2; next} {$2 -= a[FNR]} 1' file2 file1
AA 100
BB 9

如果您正在考虑用于getline此目的,请阅读http://awk.freeshell.org/AllAboutGetline所以您了解这样做的问题。

答案2

像这样的东西吗?

awk '{a=$2;getline<f;(NR%2)?$2:$2-=a;print}' f=File1 File2

相关内容