2010-09-24 2 views
2

У меня есть простой файл журнала, который очень грязный, и мне нужно, чтобы он был аккуратным. Файл содержит заголовки журналов, но все они смешаны вместе, поэтому мне нужно отсортировать файлы журнала в соответствии с заголовками журналов. Нет статического числа строк, что означает отсутствие фиксированного количества строк для каждого заголовка текстового файла. И я использую AWK для сортировки заголовков.Как Awk Параграф в сложном текстовом файле?

Файлы журнал выходит что-то вроде этого:

Car LogFile Header 
<text> 
<text> 
<text> 
Car LogFile Header 
<text> 
Car LogFile Header 
<and so forth> 

Было бы выдаваемый так:

Car LogFile Header 
<text> 
<text> 
<text> 
------------------- 
Car Logfile Header 
<text> 
<text> 

я делал вверх/искал простой код, но не кажется, что это будет работать , Может ли кто-нибудь направить меня? Благодаря!

#!/bin/bash 

# usage: pargrep <infile> <searchpattern> 

inFile="$1" 
searchString="$2" 

awk ' 
BEGIN { 
    FS="\n" 
    RS="-----" 
} 
/'"$searchString"'/ { print } 
' ${inFile} 
+0

«кажется, что он не работает» не очень информативен. Как его поведение отличается от того, что вы ожидаете и какие сообщения об ошибках вы получаете? –

+0

Это дает ошибку «awk: cmd. Line: 6: //root/Desktop/Default.log/ {print} awk: cmd. Строка: 6:^синтаксическая ошибка awk: cmd. Строка: 6://root/Desktop/Default.log/ {print} awk: cmd. строка: 6:^unterminated regexp " – JavaNoob

+0

было бы хорошо, если бы вы могли использовать образец ввода и ожидаемый результат. Спасибо – dogbane

ответ

2

Лучше использовать переход переменной вместо того, чтобы пытаться получить правильное цитирование справа.

#!/bin/bash 

# usage: pargrep <infile> <searchpattern> 

inFile="$1" 
searchString="$2" 

awk -v selector=$searchString ' 
    BEGIN { 
     FS="\n" 
     RS="-----" 
    } 
    selector ~ $0 { print } 
    ' "${inFile}" 
+0

Теперь он дает мне ошибку " awk: cmd. line: 3: fatal: невозможно открыть файл 'pargrep 'для чтения (нет такого файла или каталога)" ..... Любые мысли в этом? Это проблема из-за дополнительного вызова использования? – JavaNoob

+0

@JavaNoob: Это звучит как недостающий котировочный знак для меня. –

+0

Его все еще не работает .... – JavaNoob

2

ответ Tweaking Деннис немного:

awk -v selector="$searchString" ' 
    BEGIN { 
     RS = "Car LogFile Header\n" 
     ORS = "------" 
    } 
    selector ~ $0 { 
     print RS $0 
    } 
' "${inFile}" 

Обратите внимание, что RS является входного разделителя записей. Для иллюстрации я использовал ORS.

Я предполагаю, что «Автомобильный заголовок LogFile» является постоянным. Если это динамично, сообщите нам об этом.

Смежные вопросы