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



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

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

这将搜索文件.txt,以查找第 5 列具有最低值的行,然后打印该值。但是,我想再次将其重定向到grep,再次搜索文件.txt该行,以便我可以在上面打印至少 2 行,在下面打印 5 行(尽管更多没什么大不了的)。

我环顾四周,我知道将输出管道到grep意味着您在输出中搜索您提供给grep的参数 - 但我不确定如何反过来做?

任何帮助将不胜感激。谢谢!

如果要将命令的输出用作 grep 的命令行参数,可以使用语法$( ...)的子 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

要获得上面的 2 行上下文和下面的 5 行上下文,您可以使用 -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

没关系,我想通了。我可以将输出重定向到一个文件,然后使用 -f 选项搜索该文件中的字符串。无论如何,谢谢!如果您正在阅读与我相同的问题,希望这会有所帮助......

为什么不在一个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之前和之后的 5 行,包括命中行。

相关内容

  • 没有找到相关文章

最新更新