我想知道如何使用命令的输出作为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
行,包括命中行。