两个文件中的匹配行

两个文件中的匹配行

假设我有两个文件,file1并且file2.

file1:

passd:xxx
hopla:alli
gnar:gungg
araf:utap

file2:

alli
utap

我如何检查 file2 中的哪些行/单词与文件匹配?事实上,我可能可以用 awk 来做到这一点comm -1 -2 file1 file2,但是可以用 awk 来做到这一点吗?

答案1

使用 awk,您可以从 @jasonwryan 建议的内容开始比较两个文件...

但请修改它以满足您的需要。以下是您可以在命令行上执行的操作及其结果:

$ awk -F: 'FNR==NR {arr[$0];next} $2 in arr' file2 file1
hopla:alli
araf:utap
  • 您指定的file2是包含要搜索的单词的列表
  • file1是要搜索的大文本文件
  • -F:指定分隔符为冒号:
  • $2因为本例中要匹配的字段是file1字段 2
  • 当匹配发生时,默认操作是打印该行,因此您会看到两个匹配的行

附加信息

答案2

如果 grep 有问题,

  1. 事先尝试dos2unix file1 file2删除任何可能阻止 grep 工作的有问题的非 Unix 格式
  2. 正如@drewbenn 提到的,grep -f file2 file1

然后您应该成功地看到匹配的行:

hopla:alli
araf:utap

答案3

这个命令可以帮助你:

cat file1 | awk '{FS=":" print $0}' | xargs grep file2

我不确定 diff 命令是否有帮助。但如果安装了,我会使用它:diff file1 file2

相关内容