Выбор и сортировка IP-адреса, поддерживающего всю строку

Поэтому мне нужно отсортировать IP-адреса, а затем отсортировать их строки.

Я могу сортировать IP-адреса в файле, используя: sort -n -t . -k1,1 -k2,2 -k 3,3 -k4,4 sort -n -t . -k1,1 -k2,2 -k 3,3 -k4,4

Если мой файл выглядит так:

  add method1 abcd other thing add method2 efgh other thing2 add method2 abcd other thing2 add method5 jklm other thing5 add method3 abcd other thing3 add method1 efgh other thing2 

Но в этом случае поле 1 будет:

  add method1 a add method2 e add method2 a add method5 j add method3 a add method1 e 

И поле 4 будет:

  d other thing h other thing2 d other thing2 m other thing5 d other thing3 h other thing2 

Как и какие инструменты следует использовать для сортировки моих IP-адресов, а затем сортировки их строк. Заранее спасибо.

EDIT: пример modfied. Существует несколько строк с одним и тем же IP-адресом, но с разным текстом и в произвольном порядке.

3 Solutions collect form web for “Выбор и сортировка IP-адреса, поддерживающего всю строку”

Этот скрипт копирует ip-адрес из поля 3 с помощью awk в начало строки с разделителем «%», затем выполняет сортировку по ip-адресу в первом поле, а затем удаляет добавленную часть.

 awk '{print $3 " % " $0}' | sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 | sed 's/[^%]*% //' 

Если поле с IP-адресом не является константой, вы можете автоматически определить его на каждой строке. Замените awk выше:

 awk '{ for(i=1;i<=NF;i++) if($i~/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)break; print $i " % " $0 }' | 

Поздний ответ, но это может помочь кому-то. Если у вас есть новая версия GNU sort (от GNU coreutils 7.0 или новее), вы можете использовать опцию --version-sort (или -V ), которая будет делать правильные действия с IPv4-адресами. Предполагая ввод:

 add method1 10.1.2.3 other thing add method2 10.10.20.30 other thing2 add method2 10.1.2.3 other thing2 add method5 10.2.8.9 other thing5 add method3 10.1.2.3 other thing3 add method1 10.10.20.30 other thing2 

Запуск этого через sort -k 3 -V даст:

 add method1 10.1.2.3 other thing add method2 10.1.2.3 other thing2 add method3 10.1.2.3 other thing3 add method5 10.2.8.9 other thing5 add method1 10.10.20.30 other thing2 add method2 10.10.20.30 other thing2 

Ожидается, что вы знаете параметр -t ( man sort : field separator). Команда, которую вы хотели использовать, касается только простых IP-адресов.

Быстрое и грязное решение может заключаться в преобразовании пространств в точки . сначала файл, а затем сортировку (возможно, вы захотите отменить преобразование позже, исключая IP-адреса)

 sed -i.bak 's/ /./g' data.log sort -n -t . -k2,2 -k3,3 -k4,4 -k5,5 data.log 

Обратите внимание, что я переместил индексы. Попробуйте.

  • мы можем получить отсортированный выход grep
  • Инструмент для просмотра верхних N элементов в потоке
  • Сила сопоставления Bash (капитальные знаки против малого)
  • Объединить столбцы с помощью awk? (Или другие предложения)
  • Как подключить сортировку к gawk?
  • Сортировка ведет себя странно при сортировке с учетом регистра
  • Unix - подсчет уникальных IP-адресов, сортировка их по частоте и сортировка по IP, когда количество повторений одинаково
  • Сортировка .csv файла по алфавиту не работает правильно, когда есть дефис
  • Сортировка jpg в соответствии с датой создания и конвертирование в одиночный pdf
  • Могу ли я разархивировать и объединить отсортированные текстовые файлы за одну операцию?
  • Управление дублированными строками в файлах
  • Interesting Posts

    Расширение подстроки Bash массива с помощью некоторого неустановленного элемента

    удаление избыточности из выходных столбцов

    Что такое распределение памяти по умолчанию для процесса оболочки linux

    Проблема с выполнением команды как другого пользователя с sudo -u

    Сервер Azure Ubuntu недоступен с удаленного компьютера

    tc command linux

    Проблемы с запуском и выключением после Fedup от Fedora 20 -> 21 -> 22

    Почему bash интерпретирует символы, которые у меня есть?

    Надежный внешний адаптер Wifi для Backtrack

    Vim – перемещаться между абзацами (пустыми строками)

    Комбинация клавиш для отмены случайной массовой пастообразной ошибки

    Края в операциях файловой системы во время резервного копирования и копирования файлов

    Где находятся детали «Расширение пути» и «Расширение брекета» на странице руководства?

    Ошибка при запуске ntpd на хосте openVZ: cap_set_proc () не удалось удалить привилегии root:

    Установка шрифтов Powerline для темы zsh + Prezto

    Linux и Unix - лучшая ОС в мире.