![从给定行号列表的文件中打印非连续行](https://linux22.com/image/131619/%E4%BB%8E%E7%BB%99%E5%AE%9A%E8%A1%8C%E5%8F%B7%E5%88%97%E8%A1%A8%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AD%E6%89%93%E5%8D%B0%E9%9D%9E%E8%BF%9E%E7%BB%AD%E8%A1%8C.png)
考虑一下之后grep
,我awk
再次grep
得到一个如下所示的行号列表:
20
55
98
154
1100
...
我正在使用的命令如下所示:
grep '01/01' /var/log/some.log | grep 'some' | awk '{print $10}' | grep -vn 200 | awk -F ':' '{print $1}'
我现在想打印该文件中的这些行,最好是通过继续管道传输此命令。有任何想法吗?
我知道我可以简单地删除awk '{print $10}'
,awk -F ':' '{print $1}'
但由于某种原因,当我这样做时,我没有得到任何结果,而当我尝试使用上面发布的命令时,我确实得到了数字列表。
答案1
解决方案:
| xargs -I{} sed '{}q;d' /var/log/some.log
评论:
sed
您可以通过编写更详细的,awk
或perl
命令来缩短一长串管道(包括上面的最后一步) :
perl -lane 'print $F[9] if /01\/01/ and /some/ and $F[9]!~/200/' /var/log/some.log