我有两个文件
文件1:
45 789
46 4546
78 4564
71 546
文件2:
41 456
46 456
40 465
45 456
我想比较这些文件并获得输出:如果第一个文件第一列中的数字位于第二个文件的第一列中,则打印第二个文件中包含该数字的行。
期望的输出:
46 456
45 456
会是 grep 的东西吗?非常感谢
答案1
读取第一个文件的列以填充“已看到”值的数组。然后在读取第二个文件时,如果第一个值已被“看到”,则打印记录:
$ awk 'NR == FNR { data[$1] = 1 } NR != FNR && data[$1] { print }' file1 file2
46 456
45 456
我们还可以使用和,而不是使用FR == NR
和测试。FR != NR
FILENAME == "file1"
FILENAME == "file2"
答案2
假设您的 shell 是 bash/ksh/zsh:
join -o 0,2.2 <(sort file1) <(sort file2)
答案3
命令
awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2
输出
46 456
45 456