Я согласен с ответом, данным bonasaiviking . Чтобы импровизировать, есть сканирование окна (-sW
), которое в основном использует детали реализации определенных (, поэтому nmap предупреждает, что ему не всегда можно доверять )системы. Пакет, возвращенный RST, с -sA
или -sW
, проверяется на наличие поля TCP Window, и делается вывод об открытом или закрытом порте.
Ссылка:https://nmap.org/book/man-port-scanning-techniques.html
uniq
работает только с отсортированным вводом.
./my_script.sh | sort -u > output_file
по сути то же самое, что и
./my_script.sh | sort | uniq > output_file
awk '!a[$0]++'
— это компактный способ удаления несортированных повторяющихся строк с сохранением исходного порядка.
Используя это, мы можем, например,:
./my_script |awk '!a[$0]++' > output
awk '!a[$0]++' my_script > new_script
awk '!a[$0]++' my_script | sh > output
:%!awk '\!a[$0]++'
Идея этого состоит в том, чтобы отслеживать уже найденные шаблоны, сохраняя количество вхождений в массиве a
и печатая строку только в том случае, если значение a
для конкретного содержимого строки (представлено по $0
вawk
)по-прежнему равен нулю. Итак,
a[$0]++
увеличивает элемент массива для «индекса»$0
(= содержимое текущей входной строки )на единицу !a[$0]
— это правило фильтрации, предписывающее awk
печатать строку только в том случае, если элемент массива для содержимого по-прежнему равен нулю (, что неявно имеет место, когда он не инициализирован)!a[$0]++
объединяет два в одной строке (, также известное как «код для игры в гольф»)...и мы также можем сделать его более читабельным с помощью bashalias
:
alias myuniq='awk '\''!a[$0]++'\'
\спасибо{@AdminBee}