我想知道如何使用命令的输出作为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
的参数 - 但是我不知道怎么做其他方式?
非常感谢任何帮助。谢谢!
答案 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
行,包括命中行。