Используйте awk для получения значения параметра в массиве - PullRequest
0 голосов
/ 29 июня 2018

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

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Использование 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
0 голосов
/ 29 июня 2018

Эта строка даст вам значение, если ключ ccc:

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

, например

kent$  grep -oP 'ccc: \K[^: ]*'<<<"aaa: 0x00000111 bbb: 0x00000222 ccc: 0x00000333 ddd: adfa"
0x00000333
0 голосов
/ 29 июня 2018

Для приведенного примера, пожалуйста, следуйте инструкциям и сообщите нам.

echo "aaa: 123 bbb: 456 ccc: 789" | awk '{sub(/.*ccc: /,"");sub(/ .*/,"")} 1'

или обычным циклом из awk.

echo "aaa: 123 bbb: 456 ccc: 789" | awk '{for(i=1;i<=NF;i++){if($i=="ccc:"){print $(i+1);next}}}'
...