Как удалить повторяющиеся записи перед перенаправлением в файл

Я согласен с ответом, данным bonasaiviking . Чтобы импровизировать, есть сканирование окна (-sW), которое в основном использует детали реализации определенных (, поэтому nmap предупреждает, что ему не всегда можно доверять )системы. Пакет, возвращенный RST, с -sAили -sW, проверяется на наличие поля TCP Window, и делается вывод об открытом или закрытом порте.

Ссылка:https://nmap.org/book/man-port-scanning-techniques.html

0
08.01.2020, 11:41
2 ответа

uniqработает только с отсортированным вводом.

./my_script.sh | sort -u > output_file

по сути то же самое, что и

./my_script.sh | sort | uniq > output_file
4
28.01.2020, 02:14

awk '!a[$0]++'— это компактный способ удаления несортированных повторяющихся строк с сохранением исходного порядка.

Используя это, мы можем, например,:

  • фильтровать вывод:./my_script |awk '!a[$0]++' > output
  • отфильтровать скрипт:awk '!a[$0]++' my_script > new_script
  • отфильтровать и выполнить скрипт:awk '!a[$0]++' my_script | sh > output
  • фильтр внутри vim::%!awk '\!a[$0]++'

Идея этого состоит в том, чтобы отслеживать уже найденные шаблоны, сохраняя количество вхождений в массиве aи печатая строку только в том случае, если значение aдля конкретного содержимого строки (представлено по $0вawk)по-прежнему равен нулю. Итак,

  • a[$0]++увеличивает элемент массива для «индекса»$0(= содержимое текущей входной строки )на единицу
  • !a[$0]— это правило фильтрации, предписывающее awkпечатать строку только в том случае, если элемент массива для содержимого по-прежнему равен нулю (, что неявно имеет место, когда он не инициализирован)
  • !a[$0]++объединяет два в одной строке (, также известное как «код для игры в гольф»)

...и мы также можем сделать его более читабельным с помощью bashalias:

alias myuniq='awk '\''!a[$0]++'\'


\спасибо{@AdminBee}

2
28.01.2020, 02:14

Теги

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