可以用 awk 代替吗?

可以用 awk 代替吗?

我想从中获取数字rating作为输出

# nc localhost 9571 
language:
language:en_ZA.UTF-8
language:en_ZW.UTF-8
session-with-name:Ubuntu Classic (No effects):gnome-session --session=2d-gnome
session-with-name:Ubuntu (Safe Mode):gnome-session -f --session=2d-gnome
session-with-name:Ubuntu Classic:gnome-session --session=classic-gnome
xsession:/etc/X11/Xsession
rating:94

我可以这样做

# nc localhost 9571 | grep rating | cut -d: -f2
94

但是否可以awk用更简单的解决方案来代替?

答案1

$ nc localhost 9571 | awk -F: '/rating/ { print $2 }'

答案2

Quanta 抢先了一步,但是sed如果你愿意的话,我会提供一个变体:

nc localhost 9571 | sed -ne 's/^rating://p'

不过,MadHatter 也说了同样的话。您当前的解决方案非常合理。(不过,我会 grep 而"^rating:"不是只 grep 单词,以确保您只得到想要的行。)

答案3

你也可以只使用 shell:

nc localhost 9571 | 
while IFS=: read key val; do [[ $key = "rating" ]] && echo "$val"; done

答案4

它可以:

nc localhost 9571  | awk -F: '{ if ($1 == "rating") print $2 }' 

(我不知道您上面的 localhost 做什么,所以将您的输出用作我的 awk 命令的输入,然后用“nc ...”替换“cat” - 但这应该没问题。)

但你为什么要这么做呢? UNIX 方式就是拥有许多小工具,每个工具都擅长做一件事,通过管道将它们串联起来,而不是使用更大的多功能工具。您需要选择一个匹配的行,然后从中选择一个字段:grep选择匹配的行,并cut从输入行中选择字段;它们非常适合这项任务。但如果你真的想用 awk 一劳永逸地完成这一切,那么,就这样吧。

相关内容