根据数组比较的结果在awk中编写一个新变量

Code a new variable in awk based on result of array comparison

我正在比较两个文件 file1 和 file2 中第 3 列中的值。当列的值在文件 1 和文件 2 中不匹配时,将其编码为 0。当列的值在文件 1 和文件 2 中不匹配时,将其编码为 1。例如:

文件 1
fid1 iid1 693 900 399
fid2 iid2 589 209 485

file2
fid0 iid0 693 448 932
fid8 iid8 482 548 589

期望输出
fid1 iid1 693 900 399 1
fid2 iid2 589 209 485 0

我可以在 awk 中得到这个输出,使用 awk 'FNR==NR{a[]++;next}a[]' file1 file2

输出
fid1 iid1 693 900 399

但是,我无法弄清楚如何根据 a[] 数组比较来编写新变量的代码,而不是仅打印 file1 中匹配的行。

你可以这样做:

$ awk 'NR==FNR{a[]++;next}{$(NF+1)=(( in a) ? 1 : 0)}1' file2 file1
fid1 iid1 693 900 399 1
fid2 iid2 589 209 485 0

注:

  • 使用 $(NF+1) 可能不适用于旧的损坏的 awk。
  • 这不做线比对。这只是检查 file1 的第三列是否存在于 file2 中。