awk在一个文件中搜索列,以查看它是否与第二个文件中的任何值匹配

时间:2016-04-04 03:09:00

标签: awk sed

我想比较两个(制表符分隔)文件的第一列。如果匹配,请打印文件1中的所有内容。例如:

档案1

  MOS   A   141282  141938
  LEE   A   11121   14597
  TOD   B   19237   20373
  LEA,DOT   A   1   1000
  MAS,ALE   C   24597   24599

文件2

LEE
LEA
ALE
EEL

期望的输出:

  LEE   A   11121   14597
  LEA,DOT   A   1   1000
  MAS,ALE   C   24597   24599

现在,我可以使用以下内容在第1列中找到完全匹配:

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

给出:

LEE A   11121   14597

然而,我有点难过如何让它在第1列中选择列出多个单词的条目。我想打印每一行都有我正在寻找的单词,无论他们是否还有其他(不重要的)单词。那么如何让它识别

  LEA,DOT   A   1   1000
  MAS,ALE   C   24597   24599

还有我正在寻找的单词,并将它们打印在输出文件中? 非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为你需要在循环中进行正则表达式匹配:

awk 'NR==FNR { a[$1] = $1; next}
             { for (k in a) if ($1 ~ a[k]) { print $0; break } }' file2 file1

示例输出:

  LEE   A   11121   14597
  LEA,DOT   A   1   1000
  MAS,ALE   C   24597   24599