Номер Grep перед шаблоном - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть файл со следующим содержимым

4 packets transmitted, 2 received, 50% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.904/1.108/1.235/0.148 ms

Сейчас я пытаюсь найти процент потери пакета и полученное значение

loss=`more file.txt  | grep "% packet loss" | awk -v RS=[0-9]+ '{print RT+0;exit}'`

Но он всегда возвращает мне 4 (первое числов соответствии).Но я ожидаю, что потеря составит 50%, а полученная сумма будет 2

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Это все, что вы пытаетесь сделать?

$ awk '/% packet loss/{print $6, $4}' file
50% 2

и если они вам нужны отдельно:

$ arr=( $(awk '/% packet loss/{print $6, $4}' file) )
$ echo "${arr[0]}"
50%
$ echo "${arr[1]}"
2
0 голосов
/ 04 декабря 2018

Зачем нужно усложнять, используя RS и cat .. | grep, когда awk может просто решить проблему с помощью совпадения регулярных выражений.Просто выполните

awk 'match($0, /.*([0-9]) received, ([0-9%]+)/, arr){ print "received="arr[1]; print "loss="arr[2]  }' file.txt

Сохраните его в переменной оболочки, например, на bash с поддержкой подстановки процесса

read -r received loss < <(awk 'match($0, /.*([0-9]) received, ([0-9%]+)/, arr){ printf "%d %s", arr[1]+0, arr[2] ; }' file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...