结合grep -f和awk

Yor*_*gos 2 awk grep

我使用两个命令:

awk '{ print $2 }' SomeFile.txt > Pattern.txt

grep -f Pattern.txt File.txt
Run Code Online (Sandbox Code Playgroud)

使用第一个命令,我创建了一个理想模式列表.使用第二个命令,我提取File.txt中与Pattern.txt中的行匹配的所有行

我的问题是,有没有办法在管道中组合awk和grep,这样我就不必生成中间的Pattern.txt文件了?

谢谢!

Tom*_*ech 5

你可以在awk的一次调用中完成所有这些:

awk 'NR==FNR{a[$2];next}{for(i in a)if($0~i)print}' Somefile.txt File.txt
Run Code Online (Sandbox Code Playgroud)

a从第一个文件的第二列填充数组中的键.NR==FNR标识第一个文件(总记录数等于此文件的记录号).next跳过第一个文件的第二个块.

在第二个块中,循环遍历数组中的所有键,如果该行匹配任何键,则打印它.如果它匹配多个模式,为了避免多次打印该行,您也可以添加一个next,即{for(i in a)if($0~i){print;next}}.

如果"模式"实际上是固定字符串,则更简单:

awk 'NR==FNR{a[$2];next}$0 in a' Somefile.txt File.txt
Run Code Online (Sandbox Code Playgroud)

  • 看起来更好地使用`awk`它可以做什么,并保存`grep`进程!+1 (2认同)