我想知道如何使用命令的输出作为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行(虽然更多不是什么大问题)。
我看了看周围,我知道通过管道输出到grep意味着你要在输出中搜索你给grep的参数--但是我不确定怎么做?
任何帮助都将不胜感激。谢谢!
发布于 2015-04-29 07:33:51
如果您想使用命令的输出作为grep的命令行参数,您可以使用带有$( ...)语法的子subshell。
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发布于 2015-04-29 07:54:18
不要紧,我想通了。我可以将输出重定向到一个文件,然后使用-f选项grep在该文件中搜索字符串。不管怎样,谢谢你!如果你在阅读这篇文章时遇到和我一样的问题,希望这篇文章能对你有所帮助。
发布于 2015-04-29 12:58:24
为什么不在一个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中。
然后在end部分,它从数组a中打印出之前的2行和之后的5行,包括命中行。
https://stackoverflow.com/questions/29931723
复制相似问题