Если вашей целью является вывод форматирования , показанного с добавленным выравниваемым столбцом протокола, тогда printf
вместо print
обеспечивает тот же самый мелкозернистый элемент управления форматированием, как описано в man 3 printf
(по большей части).В вашем случае вам просто нужно получить length()
поля номера порта и вычесть его из желаемой общей ширины поля, чтобы добавить столько пробелов после записи из NATLog
перед добавлением сохраненного протокола из Sourceports
.
Это можно сделать аналогично следующему, если в качестве примера используется общая ширина поля 4:
$ awk '
NR==FNR {pcl[$1] = $2; next} {printf "%s%*s%s\n",$0,4-length($3)," ",pcl[$3]}
' Sourceports NATLog
Вывод
14 172.18.2.12 445 SMB
50 172.18.24.4 123 Network
80 10.2.123.37 22 SSH
68 172.18.1.37 25 SMTP(Insecure)
( примечание: ваш Sourceports
не может содержать дополнительные пробелы в конце записей. Если это произойдет, вам придется заменить $0
на отдельный $1,$2,$3
и настроить строку форматасоответственно)
Обычно в awk
есть много способов сделать то же самое, так что вы можете настроить его так, чтобы удовлетворить любые ваши потребности.
Используя paste
и awk
Более коротким, но менее эффективным способом было бы использовать оба значения paste
и awk
для достижения одной и той же цели.(в основном просто вывод первых двух полей NATLog
и добавление содержимого Sourceports
с помощью paste
, например,
$ paste -d ' ' <(awk '{print $1, $2}' NATLog) Sourceports
14 172.18.2.12 445 SMB
50 172.18.24.4 123 Network Time Protocol (NTP)
80 10.2.123.37 22 SSH
68 172.18.1.37 25 SMTP(Insecure)
(но это действительно нарушило бы цель изучения awk
)