Komenda awk jest wydajną metodą przetwarzania lub analizy plików tekstowych - w szczególności plików danych uporządkowanych według linii (wierszy) i kolumn.
Prosty awk polecenia można uruchamiać z wiersza poleceń. Bardziej skomplikowane zadania należy zapisywać do pliku jako programy awk (tak zwane skrypty awk).
Podstawowy format polecenia awk wygląda następująco:
awk 'wzorzec {akcja}' plik-wejściowy> plik-wyjściowy
Oznacza to: pobranie każdej linii pliku wejściowego; jeśli linia zawiera wzorzec, zastosuj akcję do linii i zapisz wynikową linię do pliku wyjściowego. Jeśli wzór zostanie pominięty, akcja zostanie zastosowana do wszystkich linii. Na przykład: awk '{print $ 5}' table1.txt> output1.txt Ta instrukcja przyjmuje element 5. kolumny każdej linii i zapisuje ją jako wiersz w pliku wyjściowym "output.txt". Zmienna "4 $" odnosi się do drugiej kolumny. Podobnie możesz uzyskać dostęp do pierwszej, drugiej i trzeciej kolumny, za pomocą $ 1, 2 $, 3 $ itp. Domyślnie kolumny są oddzielone spacjami lub tabulatorami (tzw. Białe znaki). Tak więc, jeśli plik wejściowy "table1.txt" zawiera następujące linie: 1, Justin Timberlake, tytuł 545, cena 7,30 USD2, Taylor Swift, tytuł 723, cena 7,90 USD3, Mick Jagger, tytuł 610, cena 7,90 USD4, Lady Gaga, tytuł 118, cena 7,30 USD5, Johnny Cash, tytuł 482, cena 6,50 USD6, Elvis Presley, tytuł 335, cena 7,30 USD7, John Lennon, tytuł 271, cena 7,90 USD8, Michael Jackson, tytuł 373, cena 5,50 USD Następnie polecenie wypisze następujące linie do pliku wyjściowego "output1.txt": 545,723,610,118,482,335,271,373, Jeśli separatorem kolumn jest coś innego niż spacje lub tabulatory, na przykład przecinek, możesz to określić w instrukcji awk w następujący sposób: awk-F, '{print $ 3}' table1.txt> output1.txt To wybierze element z kolumny 3 każdej linii, jeśli kolumny są rozdzielone przecinkiem. W związku z tym wyjście, w tym przypadku, byłoby: Tytuł 545 Tytuł 723 Tytuł 610 Tytuł 118 Tytuł 482 Tytuł 335 Tytuł 271 Tytuł 373 Lista instrukcji wewnątrz nawiasów klamrowych ("{", "}") nazywa się blokiem. Jeśli wstawisz wyrażenie warunkowe przed blokiem, instrukcja wewnątrz bloku zostanie wykonana tylko wtedy, gdy warunek będzie prawdziwy. awk "7 $ ==" 7,30 $ "{wydrukuj 3 $}" table1.txt W tym przypadku warunek wynosi 7 USD == " 7,30 USD", co oznacza, że element w kolumnie 7 wynosi 7,30 USD. Odwrotny ukośnik przed znakiem dolara służy zapobieganiu interpretacji 7 USD jako zmiennej, a zamiast tego dosłownie ujmuje znak dolara. Tak więc ta instrukcja awk wypisuje element w trzeciej kolumnie każdej linii, która ma "7,30 $" w kolumnie 7. Jako warunku można również użyć wyrażeń regularnych. Na przykład: awk '/ 30 / {print $ 3}' table1.txt Ciąg pomiędzy dwoma ukośnikami ("/") jest wyrażeniem regularnym. W tym przypadku jest to tylko ciąg "30." Oznacza to, że jeśli linia zawiera ciąg "30", system wypisze element w trzeciej kolumnie tego wiersza. Dane wyjściowe w powyższym przykładzie będą następujące: Timberlake, Zramolały, Presley, Jeśli elementy tabeli są liczbami, awk może wykonywać obliczenia na nich, jak w tym przykładzie: awk "{wydrukuj (2 USD * 3 USD) + 7 USD}" Poza zmiennymi, które uzyskują dostęp do elementów bieżącego wiersza (1 $, 2 $ itd.), Istnieje zmienna $ 0, która odnosi się do kompletnego wiersza (wiersza) i zmiennej NF, która przechowuje do liczby pól. Możesz również zdefiniować nowe zmienne jak w tym przykładzie: awk '{sum = 0; dla (col = 1; col <= NF; col ++) sum + = $ col; drukuj sumę; } " To oblicza i wypisuje sumę wszystkich elementów każdego rzędu. Wyrażenia awk często łączone są z poleceniami sed.




