2014-09-30 3 views
0

Я хочу сортировать имена файлов (файлы журналов) на основе некоторого общего содержимого, который существует во всех файлах. Каждый файл журнала начинается с 'p', за которым следуют некоторые цифры и заканчивается на .log. такие как:Сортировка лог-файлов на основе их содержимого

P029387.log 

В каждом логфайле, есть общая строка: «Количество операций», такие как:

total access time is 321 seconds 

Я хотел бы написать команду Баша, которая будет выводить выше строка находится в каждом файле, а также само имя файла, например:

"total access time is 267 seconds" P110234.log 
"total access time is 47 seconds" P202931.log 
"total access time is 55 seconds" P239871.log 

до сих пор я был в состоянии сортировать содержимое логах, но не печатать их имена:

find . -name p*.log -exec grep "count of operations is “ {} \; |sort -n –k5 

но выход ограничен:

"total access time is 267 seconds" 
"total access time is 47 seconds" 
"total access time is 55 seconds" 

Спасибо за вашу помощь.

ответ

1

Если вы не заботитесь о том, что точный формат, то просто:

grep 'total access time is ' P*.log 

возможно с -H, если это не по умолчанию (или отключена в качестве аргументов по умолчанию/псевдоним) поможет вам:

P110234.log:"total access time is 267 seconds" 
P202931.log:"total access time is 47 seconds" 
P239871.log:"total access time is 55 seconds" 

Если вы хотите, чтобы ваш точный результат, то это может быть проще всего использовать что-то вроде:

awk '/total access time is /{print $0,FILENAME}' P*.log 

или даже колонки расстояние:

awk '/total access time is /{print $0"\t"FILENAME}' P*.log | column -t 
1

Использование опции grep -H который печатает имя файла:

find . -name p*.log -exec grep -H "count of operations is “ {} \; |sort -n –k5 
Смежные вопросы