使用 grep
可以多次使用相同的技巧:
$ grep -w -f file1 file2 | grep -w -f file3 | grep -w -f file4
id2
id3
顺便说一句,如果您正在寻找完全匹配,而不是正则表达式-F
匹配,那么使用该标志会更好更快:
$ grep -wFf file1 file2 | grep -wFf file3 | grep -wFf file4
id2
id3
使用 awk
$ awk 'FNR==1{nfiles++; delete fseen} !($0 in fseen){fseen[$0]++; seen[$0]++} END{for (key in seen) if (seen[key]==nfiles) print key}' file1 file2 file3 file4
id3
id2
FNR==1{nfiles++; delete fseen}
每次我们开始读取一个新文件时,我们都会做两件事:(1)增加文件计数器,nfiles
. (2) 删除数组fseen
。
!($0 in fseen){fseen[$0]; seen[$0]++}
如果当前行不是 in 中的键fseen
,则将其添加到in 中fseen
并增加该行的计数seen
。
END{for (key in seen) if (seen[key]==nfiles) print key}
在我们读完最后一个文件的最后一行之后,我们查看seen
. 如果该键的计数等于我们已读取的文件数nfiles
,则我们打印该键。