Znajomość podstaw polecenia „awk” jest bardzo ważna, jeśli chodzi o wydajne przetwarzanie danych, a ten post obejmuje kluczowe cechy polecenia „awk”. Sprawdźmy najpierw składnię:
$ awk [opcje] [plik]Niektóre z najczęściej używanych opcji podano w poniższej tabeli:
Opcja | Opis |
-fa | Aby określić separator plików |
-fa | Określ plik zawierający skrypt „awk”k |
-v | Aby przypisać zmienną |
Rzućmy okiem na kilka przykładów użycia polecenia „awk”, a dla demonstracji utworzyłem plik tekstowy o nazwie plik testowy.tekst:
1. Jak wydrukować kolumnę pliku za pomocą polecenia awk??
Polecenia „awk” można użyć do pobrania określonej kolumny pliku tekstowego. Aby wydrukować zawartość pliku użyj:
$cat testFile.tekst
Teraz, aby wydrukować drugą kolumnę pliku, użyj:
$awk 'print $2' testFile.tekst
Aby wydrukować więcej niż jedno pole, użyj polecenia:
$awk 'print $1,$2,$3' testFile.tekst
Jeśli nie użyjesz przecinka „”, wynik będzie bez spacji:
$awk 'print $1$2$3' testFile.tekst
2. Jak używać wyrażenia regularnego z poleceniem awk:
Aby dopasować ciągi znaków lub dowolne wyrażenie, używamy ukośników „//”, na przykład, jeśli chcesz wydrukować nazwiska osób, które studiują „Historię”, użyj:
$awk '/Historia/ print $2' plik testowy.tekst
Wyniki wyraźnie pokazują, że tylko „Sam” i „Tommy” studiują na kursie „Historia”.
3. Jak używać wyrażenia relacyjnego z poleceniem „awk”:
Aby dopasować zawartość konkretnego pola, można użyć wyrażenia relacyjnego. Aby dopasować dowolny ciąg lub wyrażenie do pola, wskaż pole i użyj operatora porównania „~” ze wzorcem przedstawionym w następującym poleceniu:
$awk '$3 ~/is/ print $2' plik testowy.tekst
Powyższe dane wyjściowe wyświetlające każde pole w kolumnie 2 w stosunku do każdego pola zawierającego „jest” w kolumnie 3.
Aby uzyskać przeciwne wyjście powyższego polecenia, użyj „! ~” operator:
$awk '3$! ~/is/ print $2' testFile.tekst
Dla porównania możemy również użyć operatorów takich jak większa niż „>” i mniejsza niż „<” and equal “=” as well:
$awk '$4>70 drukuj $2' plik testowy.tekst
Na wydruku wydrukowano nazwiska osób, które uzyskały oceny powyżej 70.
4. Jak używać wzorca zakresu z poleceniem awk:
Do wyszukiwania można również użyć zakresu; po prostu użyj przecinka „”, aby oddzielić zakres, jak pokazano w poniższym poleceniu:
$awk '/Joel/, /Marlene/ print $3' plik testowy.tekst
Dane wyjściowe pokazują tematy z zakresu od „Joel” do „Marlene” z kolumny 2. Możemy użyć podwójnego znaku równości „==”, aby zdefiniować zakres; zobacz przykład poniżej:
$awk '4 $ == 80, 4 $ == 90 drukuj 0 $' plik testowy.tekst
Wyjście wyświetla nazwiska osób z kolumny 2 dla zakresu znaków „70 do 80” z kolumny 4.
5. Jak połączyć wzór za pomocą operatora logicznego:
Użycie operatorów logicznych, takich jak OR „||”, ORAZ „&&” pozwala łączyć wzorce wyszukiwania for. Użyj następującego polecenia
$awk '$4>80 && 6$>0.4 drukuj $2' testFile.tekst
Powyższe polecenie wypisuje imiona osób w czwartym polu większym niż 80 i szóstym polu większym niż 0.4. A tylko dwie płyty spełniają ten warunek.
6. Wyrażenia specjalne polecenia awk:
Istnieją dwa specjalne wyrażenia: „ZACZYNAĆ" i "KONIEC”:
POCZĄTEK: Aby wykonać akcję przed przetworzeniem danych
KONIEC: Aby wykonać czynność po przetworzeniu danych data
$awk 'BEGIN print “Przetwarzanie rozpoczęte”; drukuj $2; END print “Przetwarzanie zakończone”' testFile.tekst
7. Przydatna zmienna wbudowana polecenia awk:
Polecenie awk ma różne zmienne, które pomagają w przetwarzaniu danych:
Zmienna | Opis |
NF | Podaje liczbę pól w danych |
NR | Podaje numer aktualnego rekordu |
NAZWA PLIKU | Wyświetla nazwę aktualnie przetwarzanego pliku currently |
FS i OFS | Separator pól i separator pól wyjściowych |
RS i ORS | Oddziela rekord i wyjściowy separator rekordu |
Na przykład:
$awk 'ENDprint “Nazwa pliku to ” FILENAME “ma” NF “pola i” NR “rekordy”' testFile.tekst
Używamy „END”, ale jeśli użyjesz „BEGIN”, wynik da 0 pól i 0 rekordów.
8. Jak zmienić separator rekordów:
Domyślnym separatorem w rekordzie jest zwykle spacja; jeśli jest przecinek „” lub kropka „.” jako separator pól, a następnie użyj opcji „FS” wraz z separatorem.
Miejmy inny plik, w którym pola danych są oddzielone przecinkami „:”:
$cat plik testowy2.tekst$awk 'BEGIN FS= “:” print $2' testFile2.tekst
Ponieważ separatorem pliku jest dwukropek, ale polecenie „awk” jest nawet korzystne dla takich plików, po prostu użyj opcji „FS”.
Można również użyć „-F”:
$awk -F “:” 'print $2' testFile2.tekst
Domyślnym separatorem rekordów jest „nowa linia”, a aby ustawić separator rekordów na „:”, użyj:
$awk 'BEGIN RS = “:”print $1' testFile2.tekst
9. Akcje AWK:
Akcje awk to małe programy, które są otoczone nawiasami „” i mają więcej niż jedną instrukcję oddzieloną średnikami„;”.
Najczęściej używaną instrukcją z poleceniem „awk” jest instrukcja „print”. Na przykład, aby wydrukować tekst z każdym rekordem, użyj ciągu tekstowego w cudzysłowie:
$awk '„To jest pole”, $2' plik testowy.tekst
Wykonajmy prostą operację sumowania za pomocą awk:
$awk 'sum += $4 END printf “%d\n”, sum' testFile.tekst
10. Tworzenie programu awk:
Zacznijmy od programowania „awk”, poniższe programowanie to po prostu mnożenie:
ZACZYNAĆi=2
podczas (j<4)
print “Mnożenie 2 przez” j “ to ” i*j;
jot++
Zapisz program pod nazwą „mójKod.awk” i aby go uruchomić, otwórz terminal i wpisz:
$awk -f mójKod.awkWniosek:
Polecenie „awk” jest poręcznym poleceniem do przetwarzania, skanowania danych plików tekstowych, na przykład oddzielania określonego pola pliku; używamy polecenia „awk”. Ułatwia wyszukiwanie czegokolwiek w dowolnej formie lub wzorze z plików tekstowych. W tym przewodniku rozumiemy podstawy polecenia „awk” i jego użycia. Polecenie „awk” sprawdza poprawność danych, generuje raporty, a nawet analizuje pliki. Korzystanie z prostych poleceń „awk” umożliwia także użytkownikom pisanie małych programów do wydajniejszego przetwarzania danych.