Отображение времени и даты рядом с частью вывода ping

Удаление закомментированных и пустых строк из формы/etc/hosts:

sed -e 's/#.*//' -e 's/[[:blank:]]*$//' -e '/^$/d' /etc/hosts

Здесь используются три sedвыражения в следующем порядке:

  1. Удалите все после #(, включая#).
  2. Удаление пробелов (пробелов или табуляции )в конце строк.
  3. Удалить пустые строки.

С учетом вашего примера файла получается

111.11.1.1  aaaa.aa.aa
111.11.1.1  aaaa.aa.aa
111.11.1.1  aaaa.aa.aa
111.11.1.1  aaaa.aa.aa

Это, очевидно, не пытается проверить оставшиеся адреса и имена.

0
06.05.2020, 03:36
3 ответа

Это должно появиться, если указан способ.

echo -n "$(date) "
ping -c 1 8.8.8.8 | awk '$7 ~ /^time=/ {print $7}'

Не совсем понятно, нужно ли вам поле единиц, поскольку в вашем сообщении есть конфликтующие образцы. Если вы это сделаете, измените конец вот такprint $7,$8

0
28.04.2021, 23:16
ping -c 1 8.8.8.8 | awk -v date="$(date)" '$7 ~ /^time/{ print date, $7, $8 }'

Это сохраняет вывод подстановки команды dateв переменную awk dateи печатает дату и 7-е и 8-е поля, только если 7-е поле начинается с time.

0
28.04.2021, 23:16
echo "$(date)  time=$(ping -c 1 8.8.8.8 | awk '/transmitted/{print $NF}')"

фраза $ (.... )означает запуск команды, которая находится внутри скобок, и сюда вставляется вывод.

Команда ping соответствует другим предложениям, но выходные данные фильтруются немного по-другому -это выходные данные только ping...

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=22.9 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.919/22.919/22.919/0.000 ms

Команда awk ищет строку, соответствующую /transmitted/, а затем печатает последнее значение в строке, в данном случае значение времени. Поскольку количество слов в строке может варьироваться в зависимости от реализации ping или вывода и т. д., мы используем NF, чтобы всегда выбирать последний элемент строки.

0
28.04.2021, 23:16

Теги

Похожие вопросы