匹配两个文件中的列

时间:2010-06-21 12:11:23

标签: bash sed awk

我有两个文件,其中第一列可能具有相同的值。我想匹配两个文件的第一列,并在FILE1中打印出匹配的行。

FILE1:
xxx1 yyy yyy yyy
xxx2 yyy yyy yyy
xxx3 yyy yyy yyy

FILE2:
xxx3 zzzz
xxx4 zzzz

OUTPUT:
xxx3 yyy yyy yyy

欢迎任何建议。

祝福

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

awk 'FNR==NR{ a[$1]=$0;next } ($1 in a)' file2 file1

答案 2 :(得分:1)

这是我的食谱:

awk 'key[$1]; FNR==NR {key[$1]=1}' file2 file1

我假设两个列表都按键排序(第一列),每个键只在文件中出现一次。第一个模式简称:

key[$1] != 0

在这种情况下,默认操作是打印整行。此模式隐式适用于第二个文件(file1),因为对于第一个文件,该键尚未标记。 在第二种模式中:

FNR==NR {key[$1]=1}

FNR == NR意味着我们正在处理第一个文件(在这种情况下为file2)。在这种情况下,我们标记该密钥以供以后参考。