为了比较两个文件的两个字段的共同元素并打印共同元素,我使用这个:
awk 'NR==FNR{a[$2];next}$2 in a{print $2}' file1 file2
这将比较两个文件的第 2 列。
现在,我有六个这样的文件。如何使用 awk 比较这六个文件的第 2 列的共同元素,并打印出共同元素?每个文件只有两个字段。
我的期望是只有共同元素的输出。
谢谢你。
为了比较两个文件的两个字段的共同元素并打印共同元素,我使用这个:
awk 'NR==FNR{a[$2];next}$2 in a{print $2}' file1 file2
这将比较两个文件的第 2 列。
现在,我有六个这样的文件。如何使用 awk 比较这六个文件的第 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
循环中的条件以调整打印的内容。