Вопрос

У меня простой файл журнала, который очень грязный, и мне нужно его аккуратно. Файл содержит заголовки журнала, но все соединяются вместе, поэтому мне нужно сортировать файлы журнала в соответствии с заголовками журнала. Не существует статического количества строк, что означает, что нет исправления количества строк для каждого заголовка текстового файла. И я использую 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 проиллюстрировать.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top