Как 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}
Решение
Лучше использовать переменную, проходящую вместо того, чтобы пытаться получить сложную цитирующую право.
#!/bin/bash
# usage: pargrep <infile> <searchpattern>
inFile="$1"
searchString="$2"
awk -v selector=$searchString '
BEGIN {
FS="\n"
RS="-----"
}
selector ~ $0 { print }
' "${inFile}"
Другие советы
Настроив ответ Деннис немного:
awk -v selector="$searchString" '
BEGIN {
RS = "Car LogFile Header\n"
ORS = "------"
}
selector ~ $0 {
print RS $0
}
' "${inFile}"
Обратите внимание, что RS
это Вход Рекордный разделитель. я использовал ORS
проиллюстрировать.
Я предполагаю, что «заголовок логики автомобиля» постоянен. Если это динамично, дайте нам знать.