从命令中获取字符串输出,并在文件中搜索该字符串?

时间:2015-04-28 23:32:13

标签: linux bash shell awk grep

我想知道如何使用命令的输出作为grep的模式参数?特别是,我已经做了这个命令(在另一个问题的帮助下):

grep PATTERN file.txt | awk 'NR == 1 {line = $0; min = $5} NR > 1 && $5 < min {line = $0; min = $5} END{print $5}'

将在file.txt中搜索第5列具有最低值的行,然后打印该值。但是,我想再将其重定向到grep,再次搜索该行的file.txt,这样我就可以在上面打印至少2行,在下面打印5行(尽管更多不是&#39;大交易)。

我环顾四周,而且我知道输出到grep的输出意味着你搜索那个输出你给grep的参数 - 但是我不知道怎么做其他方式?

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

如果要将命令的输出用作grep的命令行argment,则可以使用带有$( ...)语法的子shell。

grep $(grep PATTERN file.txt | awk 'NR == 1 {line = $0; min = $5} NR > 1 && $5 < min {line = $0; min = $5} END{print $5}') Haystack

要获得上面两行上下文和下面五行,您可以使用-A-B标记。

grep -B2 -A5 $(grep PATTERN file.txt | awk 'NR == 1 {line = $0; min = $5} NR > 1 && $5 < min {line = $0; min = $5} END{print $5}') Haystack

答案 1 :(得分:0)

没关系,我明白了。我可以将输出重定向到文件,然后使用-f选项grep搜索该文件中的字符串。不管怎么说,还是要谢谢你!希望这有助于你在阅读时遇到与我相同的问题...

答案 2 :(得分:0)

为什么不在一个awk

中完成所有操作
awk '/PATTERN/ && (!min || $5 < min) {min=$5;c=NR} {a[NR]=$0} END{for (i=c-2;i<=c+5;i++) print a[i]}' file

这会找到归档5的最低值的行号,并将其存储在c中 它还将所有行存储在数组a中,行号作为索引 然后在结束部分中,它从数组a之前打印出2行,然后打5行,包括命中行。

相关问题