Rozdzielanie greps jest blokowane

0

Załóżmy, że mam program, który podpowiada wiele informacji. Interesują mnie tylko 3 wiadomości, które pojawiają się zawsze po sobie. Chcę teraz grepować te linie i oddzielić je od 3 kolejnych wiadomości pasujących do mojego wzorca.

Do tej pory mam następujący wiersz poleceń:

./myproc | grep -e "pattern1|pattern2|pattern3" | awk '{print $0,"\n"}'

Jednak to daje coś takiego

line 1

line 2 

line 3

line 1

line 2 

line 3

Ale to, co chcę, powinno wyglądać tak:

line 1
line 2
line 3

line 1
line 2
line 3
muXXmit2X
źródło
1
Jeśli awkjuż to robisz, po grepco w ogóle korzystać? awkmogę wykonać dopasowanie wzoru dla Ciebie
Eric Renouf
1
Drukuj nowy wiersz tylko po dopasowaniu wzoru 3.
choroba

Odpowiedzi:

1

Po pierwsze, nie powinieneś i nie powinieneś używać grep, kiedy przekazujesz wyjście do awk, ponieważ awk wie, co wie grep, a nawet więcej.

Następnie instrukcja drukowania awk (w przeciwieństwie do printf () w C lub print w perlu) automatycznie wypisuje nową linię po wartości (chociaż awk ma również swój własny printf, który nie ma).

I na koniec bnl, jeśli chcesz wydrukować cały rekord (tutaj: wiersz), nie musisz go nawet określać.

Teraz powinieneś spróbować:

./myproc | awk '/pattern1/,/pattern3/ {print}; /pattern3/ {print ""}'

I powinieneś przeczytać o wzorze zasięgu w awk człowieka .

Gombai Sándor
źródło