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 значений.

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

  • В то время как цикл чтения с grep
  • разделить большой файл на новый файл с уникальными именами файлов
  • grep список имен и информации из большего файла
  • Поиск в определенном столбце для шаблона и вывода всей строки
  • Подсчет количества строк, имеющих число больше 100
  • sed или grep, чтобы получить только значения без цифр
  • Regex ищет корни слова с общими префиксами
  • Печатать шаблон в первом файле, когда есть совпадение во втором файле
  • 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 
    Interesting Posts

    Ctrl + Start / End не работает в mate-terminal

    Ошибки системного учета на MacOS X (Yosemite)?

    Как я могу перечислить сетевые рабочие устройства и ipv4-адрес в linux без команды ifconfig / ip

    Как получить дату сборки системы Debian?

    Автоматически проверять, какие из ваших пакетов ubuntu доступны в других дистрибутивах

    Вертикальные линии не пересекаются в urxvt

    Изменение поиска YUM / DNF на изображении Raspberry Pi?

    есть ли какое-либо программное обеспечение с открытым исходным кодом для программирования linux с системными вызовами?

    Как удалить повторяющиеся буквы с помощью sed?

    Что происходит при выполнении этой команды cd / | VI?

    ssh перенаправить вывод команды Unix pwd в файл il локальный сервер

    Как разрешить Page Up на экране GNU?

    Почему я не могу ссылаться на файл, который у меня нет, хотя я могу его переместить?

    Найти тип маршрутизатора

    Почему ls -lrth и ls -ltch дают разные результаты

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