awk или sed для отображения вывода по одному на строку на основе шаблона поиска

Проблема могла возникнуть только из-за "files", поскольку сценарий @Kusalananda отлично работает, когда для его заполнения используется "find".

Оказывается, в этой строке может быть CR-LF вместо LF (инструмент, который я использовал, был портом из программы Windows C ++).

Удаление CR в переменной решило проблему. Чтобы удалить, я использовал следующую строку перед циклом for

files=${files//[$'\t\r\n']}
1
12.06.2017, 17:24
2 ответа

Попробуйте это

awk '
    BEGIN{OFS = "\t"}
    /Schedule Name:/{s = $NF}
    /Active:/{a = $2}
    /:|^$/&&!/LC\//{next}
    a == "yes"{print $NF, s}
    ' file

Или sed

sed '
    /Schedule Name:/! d
    s/.*:\s\+//
    :1
    N
    /Active:/! b1
    /yes/! d
    :2
    $! N
    /Include:/d
    /LC\//!{/:\|^$/b2;}
    s/\s*\n.*\s\(\S\+\)\s*/\n\1/
    s/\(.*\)\n\(.*\)/\2\t\1/p
    s/.*\t//
    t2
    ' file

sed версия 2:

sed -n '
    /Schedule Name:/! d
    s/.*:\s\+//
    h
    :1
    n
    /Active:\s*no/d
    /LC\//!b1
    :2
    s/.*\s\(\S*\)\s*/\1/
    G
    s/\n/\t/p
    n
    /^\s*$\|Include:/! b2
    ' file
2
27.01.2020, 23:46
awk '/Schedule/{A="";S=$NF;next}/Active/{A=$NF;next}/Customer/&&A=="yes"{print $NF,S}' billing
-1
27.01.2020, 23:46

Теги

Похожие вопросы