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
linux
command-line
grep
muXXmit2X
źródło
źródło
awk
już to robisz, pogrep
co w ogóle korzystać?awk
mogę wykonać dopasowanie wzoru dla CiebieOdpowiedzi:
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ć:
I powinieneś przeczytać o wzorze zasięgu w awk człowieka .
źródło