我需要根据列值获取一行,就像查询数据库一样。我有这样的命令输出,
名称ID Mem VCPU状态
时间(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”,但我仍然无法成功。
请帮我解决这个问题。
此致 Raaj
答案 0 :(得分:9)
可以使用各种工具进行过滤。
如果你只想要带有“r -----”grep的行绰绰有余:
command | grep "r-----"
或者
cat filename | grep "r-----"
引号是可选的,但可能会阻止grep跳过-'s
答案 1 :(得分:2)
尝试:
awk '$5 ~ /^r.*/ { print }'
像这样:
cat file | awk '$5 ~ /^r.*/ { print }'
答案 2 :(得分:2)
grep
可以为您处理:
yourcommand | grep -- 'r-----'
将(完整)输出保存到文件以便以后分析通常很有用。为此,我使用tee
。
yourcommand | tee somefile | grep 'r-----'
如果您希望稍后在不重新运行yourcommand
的情况下找到包含“-b ----”的行,您可以使用:
grep -- '-b----' somefile
此处不需要cat
!
我建议在调用--
之后设置grep
,因为您的模式包含减号,如果减号位于模式的开头,这看起来像{的选项参数{1}}而不是模式的一部分。
答案 3 :(得分:1)
grep解决方案:
command | grep -E "^([^ ]+ ){4}r"
这是做什么的(-E在扩展的正则表达式上切换):
第一个插入符号(^)匹配行的开头。 [^]恰好匹配非空格字符的一个出现,以下修饰符(+)允许它也匹配更多的出现。
与([^] +)中的尾随空格一起分组,它匹配任何非空格字符序列,后跟单个空格。修饰符{4}要求此构造恰好匹配四次。
单个“r”就是您要搜索的文字字符。
简单来说,这可以写成“如果行开始< ^>有四个字符串,后跟一个空格<([^] +){4}>并且下一个字符是,那么这条线匹配。“
Jan Goyvaerts(http://www.regular-expressions.info/quickstart.html)撰写了关于正则表达式的非常好的介绍。
答案 4 :(得分:0)
在linux中通过awk cmd过滤:
首先找到此cmd的列并存储file2: -
awk' / Domain-0 0 15485 /' file1> file2
<强>输出: - 强>
Domain-0 0 15485 16 r ----- 1779042.1
在文件2中的awk cmd之后: -
awk&#39; {打印$ 1,$ 2,$ 3,$ 4,&#34; \ n&#34;,$ 5,$ 6}&#39; file2的
最终输出: -
Domain-0 0 15485 16
r ----- 1779042.1