过滤Linux命令输出
我需要根据列值获取一行,就像查询数据库一样。我有这样的命令输出 名称ID Mem VCPUs State过滤Linux命令输出,linux,Linux,我需要根据列值获取一行,就像查询数据库一样。我有这样的命令输出 名称ID Mem VCPUs State 时间(s) 域-0 0 15485 16 r----- 1779042.1 prime95-01 512 1 -b----61.9 这里我只需要列出那些状态为“r”的行。像这样的, 域-0 0 15485 16 r-----1779042.1 我尝试过使用“grep”和“awk”,但仍然没有成功 请在这个问题上帮助我 问候,, Raaj试试: awk '$5 ~ /^r.*/ { print
时间(s) 域-0 0 15485 16 r----- 1779042.1 prime95-01 512 1
-b----61.9 这里我只需要列出那些状态为“r”的行。像这样的, 域-0 0 15485 16
r-----1779042.1 我尝试过使用“grep”和“awk”,但仍然没有成功 请在这个问题上帮助我 问候,, Raaj试试:
awk '$5 ~ /^r.*/ { print }'
像这样:
cat file | awk '$5 ~ /^r.*/ { print }'
有多种工具可用于筛选 如果您只想要带有“r-----”的行,grep就足够了:
command | grep "r-----"
或
引号是可选的,但可能会防止grep被-'的grep解决方案绊倒:
command | grep -E "^([^ ]+ ){4}r"
此操作的作用(-E在扩展regexp上切换):
第一个插入符号(^)与行的开头匹配。
[^]只匹配非空格字符的一次出现,以下修饰符(+)允许它也匹配更多出现
它与([^]+]中的尾随空格组合在一起,匹配后跟单个空格的任何非空格字符序列。修改器{4}要求此构造精确匹配四次
然后,单个“r”就是您要搜索的文字字符
简单地说,这可以写成“如果行以四个字符串开头,后跟一个空格,下一个字符是,那么行匹配。”
Jan Goyvaerts写了一篇非常好的正则表达式介绍(http://www.regular-expressions.info/quickstart.html).
grep
可以为您处理此问题:
yourcommand | grep -- 'r-----'
将(完整的)输出保存到一个文件以供以后分析通常很有用。为此,我使用tee
yourcommand | tee somefile | grep 'r-----'
如果您想稍后在不重新运行yourcommand
的情况下找到包含“-b----”的行,您可以使用:
grep -- '-b----' somefile
这里不需要cat
我建议将
--
放在调用grep
之后,因为您的模式包含减号,如果减号位于模式的开头,这看起来像是grep
的一个选项参数,而不是模式的一部分。在linux中通过awk cmd进行过滤:-
首先找到此cmd的列并存储文件2:-
awk'/Domain-0 0 15485/'file1>file2
输出:-
域0 15485 16
r-----1779042.1
在文件2中的awk cmd之后:-
awk'{打印$1、$2、$3、$4、“\n”、$5、$6}'文件2
最终输出:-
域0 15485 16
r-----1779042.1@Raajkumar:欢迎来到StackOverflow。请花一点时间阅读这一节,了解我们在这里如何说“非常感谢”:“引号是可选的,但可能会防止grep被-”所绊倒。但他们不会。哪部分不起作用?当我在七年前写它的时候,它确实存在,但是如果你能指出错误的话,我很乐意更新它。
grep -- '-b----' somefile