парсинг вывода с помощью awk - PullRequest
3 голосов
/ 13 января 2012

Я хочу получить список приложений и их выходных портов для некоторого заданного списка приложений из моей программы на Си.

Я подумываю использовать что-то вроде

ss -natp |  awk '/firefox/ { split($4,array,":"); printf "%d ", array[2]} END{print ""}''

, который дает мне список вроде 41477 59505.

Какой эффективный способ вызвать ss один раз, а затем получить его для всех приложений? (Несколько выходных каналов? Существует ли оптимальный способ использовать awk для множества совпадений? Катализировать ss в файл, а затем многократно awk-вызывать его?)

Спасибо!

1 Ответ

3 голосов
/ 13 января 2012

Используйте возможности ассоциативного массива awk.

ss -natp | awk '{port = split($4, array, ":"); program[$1] = program[$1] " " port; }
                END { for (p in program) print p ": " program[p]; }'

Не проверено - но концепция приблизительно верна.

...