2015-08-25 2 views
1

у меня есть два файла abc.log и xyz.logХотите найти четкие линии между двумя файлами

abc.log есть что-то вроде:

error: 142 
error: 143 
error: 144 
error: 100 
error: 142 

и файл errors.log имеет содержание

error: 140 
error: 143 
error: 142 
error: 144 
error: 156 

Я хочу перечислить ошибку, которая не присутствует в abc.log и присутствует в error.log. Файл abc.log может иметь несколько повторяющихся ошибок.

Я пишу сценарий оболочки, и один лайнер поможет. Благодаря Ambarish

ответ

0
awk 'NR==FNR{a[$0];next}!($0 in a)' abc.log errors.log 

будет делать работу, а выход:

error: 140 
error: 156 

Идея заключается сохранить abc.log в хэш-таблице, для каждой строки в errors.log проверки, если Хеш a не содержит строку , Распечатать.

2
fgrep -v -f abc.log xyz.log 

fgrep читает матчи из файла.

-v печатает содержание не соответствие

+0

Возможно, это самый простой вариант. –

+0

Большое спасибо. Это сработало. – mb47

0

Это должно сделать трюк:

comm -13 <(sort abc.log | uniq) <(sort errors.log | uniq) 

Объяснение

  • comm [OPTION]... FILE1 FILE2 сравнивает (отсортированный) файлы FILE1 и FILE2 построчно. Без параметров он выдает вывод из трех столбцов: строки только в FILE1, строки только в FILE2 и строки в обоих файлах. С -1 первый столбец и с -3 третий столбец не показан, поэтому -13 показывает только строки, уникальные для FILE2.
  • Конструкция <(COMMAND) называется заменой процесса (работает как минимум с bash и zsh). Он принимает выход COMMAND и обеспечивает именованный канал или файл (в зависимости от возможностей системы) с выходом, как содержание
  • sort FILE | uniq (альтернативно sort -u, если ваш sort поддерживает) сортирует FILE в соответствии с требованиями `комм и удаляет повторяющиеся строки. Также будут показаны строки дубликатов, которые также содержатся в первом файле, но чаще появляются во втором файле.
Смежные вопросы