Извините, если это простой вопрос программирования оболочки, но я не смог найти способ сделать именно то, что хотел.Извлечение различий из журналов
У меня есть 2 журнала.
log1
Cust Subsys StartDate EndDate col1 col2 col3
1001 10000 20150501 20150731 6.1700 0.0000 0.0000 -- this line is identical in both logs
1001 12000 20150401 20150630 0.0000 0.0000 0.0000 -- this line is missing from log2
1003 13000 20150310 20150630 2.4800 0.0000 0.0000 -- the value in log1.col1 is different from the one in log2.col1
И log2
Cust Subsys StartDate EndDate col1 col2 col3
1001 10000 20150501 20150731 6.1700 0.0000 0.0000 -- this line is identical in both logs
1003 13000 20150310 20150630 9.1800 0.0000 0.0000 -- the value in log1.col1 is different from the one in log2.col1
7000 7777 20150406 20150413 4.3300 0.0000 0.0000 -- this line is missing from log1
Я хотел бы генерировать 3 отчетов из этих журналов:
линии, найденные в
log1
, но не вlog2
Линии найдены в
log2
, но не вlog1
линий, которые идентичны в первых 4 столбцах
log1
иlog2
, но имеют разные значения в столбцах:col1
,col2
илиcol3
.
Я сортируется как журналы по всем столбцам:
cat log1 |sort -n -k1,1 -k2,2r -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 > log1.sorted
cat log2 |sort -n -k1,1 -k2,2r -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 > log2.sorted
Затем я попытался использовать комлинк, чтобы генерироваться первые 2 доклада:
comm -13 log1.sorted log2.sorted > unique2.log
comm -23 log1.sorted log2.sorted > unique1.log
И я заметил, что есть линии в unique1.log
, который находится в log1
и log2
. (мои журналы имеют более 20 000 строк в каждом). comm
не используется для извлечения строк, которые не находятся в одном из журналов? Работает ли это только в том случае, если номера строк одинаковы? (Линия находится в unique1.log
это число 188
в log1
и 207
в log2
)
Как я мог извлечь данные для 3-го отчета, где я только хочу показать строки, которые имеют различные значения в col1
col2
или col3
?
Спасибо
Используя приведенную выше команду 'comm -23 <(sort log1) <(sort log2)> unique_in_file1.log' не работает. Мне была получена следующая ошибка' ksh: 0403-057 Ошибка синтаксиса: '('не ожидается.' – Shiny
sorry @ Блестящий я обновил ответ –