2

为了比较两个文件的两个字段的共同元素并打印共同元素,我使用这个:

awk 'NR==FNR{a[$2];next}$2 in a{print $2}' file1 file2

这将比较两个文件的第 2 列。

现在,我有六个这样的文件。如何使用 awk 比较这六个文件的第 2 列的共同元素,并打印出共同元素?每个文件只有两个字段。

我的期望是只有共同元素的输出。

谢谢你。

4

1 回答 1

2

如果每个文件的第 2 列中的值在文件中是唯一的,那么这就足够了:

awk '{a[$2]++;} END {for (i in a) if (a[i] > 1) print i;}' \
    file1 file2 file3 file4 file5 file6

(假设您想要“出现在多个文件中”;如果您想要“出现在所有文件中” ,请更改> 1为)。== 6

如果第 2 列中的值可以与给定文件重复,那么您必须更加努力,可能像这样:

awk '{ if (f[$2] != FILENAME) a[$2]++; f[$2] = FILENAME; }
     END { for (i in a) if (a[i] > 1) print i; }' \
     file1 file2 file3 file4 file5 file6

该数组f记录了哪个文件最后识别了 ; 中的值$2。如果那不是当前文件,则增加数组中的计数a并记录当前文件识别$2. 和以前一样,调整for循环中的条件以调整打印的内容。

于 2013-10-13T16:20:27.287 回答