如何使用awk比较常见元素的六个文件

时间:2013-10-13 16:07:04

标签: awk

要比较两个文件的两个字段以查找公共元素并打印公共元素,我使用它:

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分: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循环中的条件以调整打印的内容。