过滤Linux命令输出

vqlkdk9b  于 2023-04-29  发布在  Linux
关注(0)|答案(5)|浏览(179)

我需要根据列值获取一行,就像查询数据库一样。我有一个这样的命令输出:

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”,但仍然无法成功。

acruukt9

acruukt91#

有多种工具可用于过滤。
如果你只想要“r-----”的行,grep就足够了:

command | grep "r-----"

或者

cat filename | grep "r-----"
bnl4lu3b

bnl4lu3b2#

grep可以帮你处理这个问题:

yourcommand | grep -- 'r-----'

将(完整)输出保存到一个文件中以便以后分析通常很有用。我用tee

yourcommand | tee somefile | grep 'r-----'

如果你想稍后找到包含“-B----”的行而不重新运行yourcommand,你可以用途:

grep -- '-b----' somefile

我建议将--放在grep的调用之后,因为你的模式包含减号,如果减号在模式的开头,这看起来像是grep的选项参数,而不是模式的一部分。

rks48beu

rks48beu3#

尝试:

awk '$5 ~ /^r.*/ { print }'

就像这样:

cat file | awk '$5 ~ /^r.*/ { print }'
2exbekwf

2exbekwf4#

grep解决方案:

command | grep -E "^([^ ]+ ){4}r"

这是什么(-E在扩展regexp上切换):
第一个插入符号(^)匹配行的开头。[^ ]只匹配一个非空格字符,后面的修饰符(+)允许它匹配更多的出现。
与([^ ]+)中的尾随空格组合在一起,它匹配任何后跟单个空格的非空格字符序列。修改器{4}要求此构造精确匹配四次。
单个的“r”就是你要搜索的字符。
简单地说,这可以写为“如果一行以四个字符串〈^〉开头,后面跟着一个空格〈([^ ]+){4}〉,下一个字符是,那么该行匹配。”
Jan Goyvaerts写了一个关于正则表达式的很好的介绍(http://www.正则表达式info/quickstart.html)。

liwlm1x9

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

相关问题