AWK объединяет выходные строки при извлечении определенных строк

Программа readlink предназначена для считывания расположения символических ссылок. Если у вас есть обычные файлы, возможно, для этой работы есть лучшие инструменты. Для поиска файлов мне нравится использовать команду find. Похоже, вы можете выполнить все упражнение за один шаг, используя find:

find. -type f -exec touch {} -d "$(date -d yesterday)" \;
  • find.:поиск в текущем каталоге .и во всем, что находится под ним
  • -type f:искать только обычные файлы
  • -exec:указать find запускать следующую команду для каждого найденного объекта
  • touch {} -d "$(date -d yesterday)" \;:команду, которую вы хотите выполнить для каждого файла. «{}» — это заполнитель для вывода findи \; обозначает конец оператора -exec
0
22.12.2019, 19:09
1 ответ

Обычно нужно сохранять необходимую информацию из всех строк в переменные awk, а затем распечатывать данные в последней строке блока. Таким образом, для примера у вас будет что-то вроде этого (Я не закодировал случай задержки хоста, так как данные примера не показывают это ).

nmap -sP 192.168.1.0/24 -n --max-rtt-timeout 50ms |
  awk '/Nmap scan report for / {ip=$5}
       /Host is up/ { latency=$4 ; sub(/(/,"",latency) }
       /MAC Address: / { mac=$3; print(ip "," mac "," latency) ; ip=mac=latency="unknown" }
       BEGIN { print "IP,MAC,RTT"}

Очистка переменных в последней строке блока может потребоваться или не потребоваться, в зависимости от того, всегда ли данные полны или нет. Если переменных много, рассмотрите возможность использования массива, а не скалярных переменных, таких как ip, mac, latency, так как все они могут быть очищены одним удалением.

0
28.01.2020, 02:59

Теги

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