GREP исключает первые 11 значений

У меня массивный файл журнала, который нужно фильтровать. В этом журнале я хочу отобразить все журналы, содержащие строку dns и я хочу видеть их только один раз.

т.е. из этого:

 Dec 9 07:24:02 94.15.218.140 syslog: ssk:548.049:is_dns_hijack:1451:isDnsHijack=0 Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.217:cmsLck_acquireLockWithTimeoutTraced:98:acquired lock. callerFuncName is_dns_hijack; timeout 12000 milliseconds Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.218:cmsLck_releaseLockTraced:144:lock hold time=0ms, acquiring lock callerFuncName is_dns_hijack; releasing lock callerFuncName is_dns_hijack; Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.225:is_dns_hijack:1425:isDnsHijack=0 Dec 9 07:24:17 94.15.218.140 syslog: ssk:563.048:cmsLck_acquireLockWithTimeoutTraced:95:acquired lock. callerFuncName is_dns_hijack; timeout 12000 milliseconds Dec 9 07:24:17 94.15.218.140 syslog: ssk:563.048:cmsLck_releaseLockTraced:141:lock hold time=0ms, acquiring lock callerFuncName is_dns_hijack; releasing lock callerFuncName is_dns_hijack; Dec 9 07:24:17 94.15.218.140 syslog: ssk:563.049:is_dns_hijack:1451:isDnsHijack=0 

к этому :

 Dec 9 07:24:02 94.15.218.140 syslog: ssk:548.049:is_dns_hijack:1451:isDnsHijack=0 Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.217:cmsLck_acquireLockWithTimeoutTraced:98:acquired lock. callerFuncName is_dns_hijack; timeout 12000 milliseconds Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.218:cmsLck_releaseLockTraced:144:lock hold time=0ms, acquiring lock callerFuncName is_dns_hijack; releasing lock callerFuncName is_dns_hijack; 

В принципе, это тот же журнал, который повторяется больше раз из-за другой метки времени.

Я пытался использовать uniq но для этого мне нужно удалить отметку времени в третьем столбце (достижимая с awk '{ $3=""; print }' ), но, как вы можете видеть из журнала, первые 11 символы различны (т.е. ssk:563.048ssk:563.049 ). Я думал о том, чтобы сделать grep со словом dns и попытаться игнорировать первые 11 значений.

Как я могу это сделать? Есть ли способ лучше?

One Solution collect form web for “GREP исключает первые 11 значений”

Используйте awk и : как разделитель полей. Затем вы можете сохранить каждое уникальное сообщение об ошибке (которое будет 6-м полем) в массиве и напечатать только первое вхождение:

 $ awk -F: '!a[$6]++' file Dec 9 07:24:02 94.15.218.140 syslog: ssk:548.049:is_dns_hijack:1451:isDnsHijack=0 Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.218:cmsLck_releaseLockTraced:144:lock hold time=0ms, acquiring lock callerFuncName is_dns_hijack; releasing lock callerFuncName is_dns_hijack; Dec 9 07:24:10 90.192.172.112 syslog: ssk:363.217:cmsLck_acquireLockWithTimeoutTraced:98:acquired lock. callerFuncName is_dns_hijack; timeout 12000 milliseconds 

Сценарий выше сохранит каждую строку как запись в ассоциативном массиве a только если для 6-го поля ( !a[$6] ) уже не сохранено значение. Поскольку действие по умолчанию в awk должно печатать, когда что-то оценивает значение true, это приведет к печати только первых уникальных вхождений.

Если вы хотите сделать это только для строк, соответствующих dns , используйте:

 awk -F: '!a[$6]++ && /dns/' file 

Что касается игнорирования 1-го 11 строк, вы можете сделать это с помощью:

 grep dns file | tail -n +12 
  • В чем разница между \ b и \ <в команде grep
  • Замените строку и замените ее частью
  • Значение следующих команд Linux
  • Как использовать grep / awk / unix для соответствия всем строкам из одного файла в другом файле, даже если они дублируются
  • Grep для поиска шаблона в файле
  • Как выполнить трассировку стека с помощью grep и regex?
  • В каком каталоге работает узел?
  • Список всех обычных файлов, содержащих (в их имени, каталоге или их содержимом) определенную (под) строку
  • Найти все измененные файлы svn и скопировать файлы, измененные в одной структуре папок
  • используя команды grep и wc для решения проблемы
  • Как я рекурсивно ретранслировать через .gz-файлы?
  • Как использовать ограниченные символы в egrep?
  • Interesting Posts

    Как монтировать / запускать без записи в / run / mount?

    Есть ли команда для перечисления файлов, исключение подкаталогов и отображение размера и даты?

    Получение пароля после редактирования файла sudoers в cent OS 7?

    Пользовательский исполняемый файл не может запускаться сразу после загрузки.

    Поиск файлов на основе имени префикса каталога и копирования в каталог

    Использование ресурсов в x-forwarding

    Чтение из STDIN и непосредственное использование данных (при чтении) или открытие URL-адреса с помощью zbar

    Добавление файлов в образ initramfs – надежный?

    Невозможно удалить файлы для мусора в подключенной файловой системе

    Звук трубки другому пользователю на том же компьютере (pulseaudio)

    Как суммировать массив чисел bash (некоторые в научной нотации)?

    Извлечение строки до первой цифры в Bash

    Почему введенный пароль не отображается?

    Как сгенерировать набор новых разных файлов с помощью сценариев оболочки с определенным именем шаблона?

    Почему параметры ключа gpg не отображаются при генерации ключа?

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