【问题标题】:Use awk to get value of the parameter in the array使用 awk 获取数组中参数的值
【发布时间】:2018-06-29 12:19:33
【问题描述】:

journalctl -b 向我展示了这样的日志:

something something somethng
aaa: 0x00000111 bbb: 0x00000222 ccc: 0x00000333 ddd: 0x00000444
something something somethng

如何获取参数'ccc'的值?

例如:

journalctl -b | awk '/ccc:/{print $1}'

显示第一个单词,但我需要在“ccc”之后获取第一个单词:

0x00000333

【问题讨论】:

  • 你不断改变你的要求以使答案失败,太好了!
  • 对不起,我只是想让它更具体
  • 没关系,但是下次发问题的时候请尽量做样例数据,包括各种案例。
  • 看看man journalctl。有很多选项(可能是 -g 或 -F)

标签: bash awk grep journal


【解决方案1】:

使用sed

$ echo "aaa: 0x00000111 bbb: 0x00000222 ccc: 0x00000333 ddd: 0x00000444"|sed 's/.*ccc: \([^ ]*\).*/\1/g'
0x00000333

如果你真的想用awk

$ echo "aaa: 0x00000111 bbb: 0x00000222 ccc: 0x00000333 ddd: 0x00000444"|awk '/ccc:/{s=$0; gsub(".*ccc: ", "", s); gsub(" .*$", "", s); print s}'
0x00000333

【讨论】:

  • 是否有可能升级 awk 使其只能找到一个阵列?如果 journal -b 显示更多 ccc 参数,那么我得到的输出很长
【解决方案2】:

如果键是ccc,此行将给出您的值:

journalctl -b|grep -oP 'ccc: \K[^ :]*'

例如

kent$  grep -oP 'ccc: \K[^: ]*'<<<"aaa: 0x00000111 bbb: 0x00000222 ccc: 0x00000333 ddd: adfa"
0x00000333

【讨论】:

  • 我喜欢这个!
  • 很好,但是我可怜的grep没有-P
猜你喜欢
  • 1970-01-01
  • 2022-11-10
  • 2018-10-11
  • 2021-07-30
  • 2018-11-28
  • 2015-07-12
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多