我需要根据列值获取一行,就像查询数据库一样。我有一个这样的命令输出:
Name ID Mem VCPUs State Time(s)
Domain-0 0 15485 16 r----- 1779042.1
prime95-01 512 1 -b---- 61.9
这里我只需要列出状态为“r”的那些行。像这样的事
Domain-0 0 15485 16 r----- 1779042.1
我试过使用“grep”和“awk”,但仍然无法成功。
5条答案
按热度按时间acruukt91#
有多种工具可用于过滤。
如果你只想要“r-----”的行,grep就足够了:
或者
bnl4lu3b2#
grep
可以帮你处理这个问题:将(完整)输出保存到一个文件中以便以后分析通常很有用。我用
tee
。如果你想稍后找到包含“-B----”的行而不重新运行
yourcommand
,你可以用途:我建议将
--
放在grep
的调用之后,因为你的模式包含减号,如果减号在模式的开头,这看起来像是grep
的选项参数,而不是模式的一部分。rks48beu3#
尝试:
就像这样:
2exbekwf4#
grep解决方案:
这是什么(-E在扩展regexp上切换):
第一个插入符号(^)匹配行的开头。[^ ]只匹配一个非空格字符,后面的修饰符(+)允许它匹配更多的出现。
与([^ ]+)中的尾随空格组合在一起,它匹配任何后跟单个空格的非空格字符序列。修改器{4}要求此构造精确匹配四次。
单个的“r”就是你要搜索的字符。
简单地说,这可以写为“如果一行以四个字符串〈^〉开头,后面跟着一个空格〈([^ ]+){4}〉,下一个字符是,那么该行匹配。”
Jan Goyvaerts写了一个关于正则表达式的很好的介绍(http://www.正则表达式info/quickstart.html)。
liwlm1x95#
linux下按awk cmd过滤:-
首先找到该cmd的列并存储file 2:-
awk '/Domain-0 0 15485 /' file1〉file2
输出:-
域-0 0 15485 16 r---- 1779042。1
在file 2中的awk cmd之后:-
awk '{print $1,$2,$3,$4,"\n”,$5,$6}' file2
最终输出:-
域名-0 0 15485 16
r-----1779042。1