сортировать и uniq в awk

Я знаю, что там есть «сортировка» и «uniq», однако сегодня вопрос заключается в том, как использовать AWK для выполнения такой работы. Скажите, есть ли у меня список чего-нибудь действительно (ips, names или numbers), и я хочу их сортировать;

Вот пример: я беру IP-номера из почтового журнала:

awk 'match($0,/\[[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\]/) { if ( NF == 8 && $6 == "connect" ) {print substr($0, RSTART+1,RLENGTH-2)} }' maillog 

Можно ли сортировать их, ips, «на ходу» в пределах одной и той же команды awk? Я не требую полного ответа на мой вопрос, но некоторые подсказки, с чего начать.

Ура!

Для сортировки вы можете использовать трубу также внутри команды awk , как в:

 awk '{ print ... | "sort ..." }' 

Синтаксис означает, что все соответствующие строки файла данных будут переданы в один и тот же экземпляр сортировки.

Конечно, вы также можете сделать это на уровне оболочки:

 awk '{ print ... }' | sort ... 

Или вы можете использовать GNU awk который имеет несколько функций сортировки, определенных изначально.

uniq в awk обычно выполняется путем сохранения «уникального элемента данных или ключа» в ассоциативном массиве и проверки необходимости запоминания новых данных. Один пример для иллюстрации:

 awk '!a[$0]++' 

Это означает: если текущая строка не находится в массиве, условие истинно и действие по умолчанию для печати строки, вызванной. Последующие строки с теми же данными приведут к ложному состоянию, и данные не будут напечатаны.