Mam plik z rekordami, które są w postaci:wyszukiwania awk na wielu polach pliku nagrania wielu linii
SMS-MT-FSM-DEL-REP
country: IN
1280363645.979354_PFS_1_1887728354
SMS-MT-FSM-DEL-REP
country: IN
1280363645.729309_PFS_1_1084296392
SMS-MO-FSM
country: IR
1280105721.484103_PFM_1_1187616097
SMS-MO-FSM
country: MO
1280105721.461090_PFM_1_882824215
ten nadaje się do analizowania przez awk przy użyciu coś jak: awk „BEGIN {FS = "\ n"; RS = ""} /country:.*MO/ {print $ 0} '
Moje pytanie brzmi: jak używać awk do wyszukiwania rekordów na 2 oddzielnych polach? Na przykład chcę wydrukować tylko rekordy, które mają kraj ORAZ kto nagrywa pierwszą linię to SMS-MO-FSM?
Uważaj na niechciane dopasowania regex (np. 'Kraj: SMO'). Gdyby było to możliwe, użyłbym porównania łańcuchów i zakotwiczenia wszystkich wyrażeń regularnych. – schot
dziękuję, ale zastanawiam się, czy możesz odpowiedzieć (prawdopodobnie bardzo prosty) dodatek do ostatniego pytania. Chciałbym wydrukować wynik w jednym wierszu (dla pipingu do sortowania | uniq)> Uruchomiłem twój kod i działało świetnie (dziękuję), ale kiedy ustawiłem OFS na "" (spacja) pola rekordu wciąż pojawiały się na różnych liniach. Co ja robię źle? Oto mój kod: awk 'BEGIN {FS = "\ n"; RS = ""; OFS = "";} 2 $/kraj: MO $/&& $ 1 ~/SMS-MO-FSM/{print $ 0} 'testFile.txt – adaptive
podczas pipowania do sortowania, potrzebujesz nowych linii .. Nie wiem jak odpowiedz na twoje pytanie, ponieważ nie podajesz wystarczających informacji na temat swoich danych. spróbuj ustawić OFS = "\ n" i zobacz. – ghostdog74