Awk jest językiem skryptowym używanym do manipulowania danymi i generowania raportów.Język programowania poleceń awk nie wymaga kompilacji i pozwala użytkownikowi używać zmiennych, funkcji numerycznych, funkcji łańcuchowych i operatorów logicznych.
Awk to narzędzie, które umożliwia programistom pisanie małych, ale skutecznych programów w postaci instrukcji, które definiują wzorce tekstowe, które mają być wyszukiwane w każdej linii dokumentu i akcje, które mają być wykonane, gdy dopasowanie zostanie znalezione w wierszu., Awk jest używany głównie do skanowania i przetwarzania wzorów. Przeszukuje jeden lub więcej plików, aby sprawdzić, czy zawierają wiersze pasujące do określonych wzorców, a następnie wykonuje powiązane akcje.
Awk jest skrótem od nazwisk twórców-Aho, Weinberger i Kernighan.
co możemy zrobić z AWK ?
1. Operacje AWK:
(a) skanuje plik linia po linii
(b) dzieli każdą linię wejściową na pola
(c) porównuje linię/pola wejściowe do wzorca
(d) wykonuje działania na dopasowanych liniach
2., Przydatne do:
(a) przekształcania plików danych
(b) tworzenia sformatowanych raportów
3. Konstrukcje programistyczne:
(a) Formatuj linie wyjściowe
(b) operacje arytmetyczne i łańcuchowe
(c) warunkowe i pętle
składnia:
awk options 'selection _criteria {action }' input-file > output-file
opcje:
-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument.-F fs : Use fs for the input field separator
przykładowe polecenia
przykład:
rozważ następujące plik tekstowy jako plik wejściowy dla wszystkich przypadków poniżej.
$cat > employee.txt
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
1. Domyślne zachowanie Awk: domyślnie Awk wypisuje każdą linię danych z podanego pliku.,
$ awk '{print}' employee.txt
Wyjście:
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000
w powyższym przykładzie Nie podano wzorca. Tak więc działania mają zastosowanie do wszystkich linii. Akcja print bez żadnego argumentu domyślnie wypisuje cały wiersz, więc wypisuje wszystkie wiersze pliku bez błędu.
2. Wydrukuj linie, które pasują do podanego wzoru.
$ awk '/manager/ {print}' employee.txt
Wyjście:
ajay manager account 45000varun manager sales 50000amit manager account 47000
w powyższym przykładzie polecenie awk wypisuje całą linię, która pasuje do 'menedżera'.
3., Dzielenie linii na pola: dla każdego rekordu tj. linii, polecenie awk domyślnie dzieli rekord oddzielony białym znakiem i przechowuje go w zmiennej $n. Jeśli linia zawiera 4 słowa, będzie przechowywana odpowiednio w $1, $2, $3 i $4. Ponadto, $0 reprezentuje całą linię.
$ awk '{print $1,$4}' employee.txt
Wyjście:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
w powyższym przykładzie, $1 i $4 reprezentują odpowiednio pola Nazwa i wynagrodzenie.,
wbudowane zmienne w Awk
wbudowane zmienne Awk zawierają zmienne pola—$1, $2, $3, i tak dalej ($0 to cała linia) – która rozbija linię tekstu na poszczególne słowa lub kawałki zwane polami.
NR: NR polecenie przechowuje bieżącą liczbę rekordów wejściowych. Pamiętaj, że rekordy są zwykle wierszami. Polecenie Awk wykonuje polecenie wzorzec / akcja raz dla każdego rekordu w pliku.
NF: polecenie NF przechowuje liczbę pól w bieżącym rekordzie wejściowym.,
FS: polecenie FS zawiera znak separatora pól, który jest używany do dzielenia pól w linii wejściowej. Domyślną wartością jest „biała spacja”, czyli znaki spacji i tabulacji. FS może być przypisany do innego znaku (zazwyczaj w BEGIN), aby zmienić separator pól.
RS: polecenie RS przechowuje bieżący znak separatora rekordów. Ponieważ domyślnie rekordem wejściowym jest linia wejściowa, domyślnym znakiem separatora rekordów jest nowy wiersz.
OFS: polecenie OFS przechowuje separator pól wyjściowych, który oddziela pola, gdy Awk je drukuje. Domyślną wartością jest pusta spacja., Gdy print ma kilka parametrów oddzielonych przecinkami, wyświetli wartość OFS pomiędzy każdym parametrem.
ORS: polecenie ORS przechowuje separator rekordów wyjściowych, który oddziela linie wyjściowe, gdy Awk je drukuje. Domyślnie jest to znak nowej linii. print automatycznie wyświetla zawartość RNO na końcu tego, co jest podane do wydruku.,
przykłady:
użycie wbudowanych zmiennych NR (wyświetl numer linii)
$ awk '{print NR,$0}' employee.txt
Wyjście:
1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000
w powyższym przykładzie polecenie awk Z NR wypisuje wszystkie linie wraz z numerem linii.
użycie wbudowanych zmiennych NF (wyświetl ostatnie pole)
$ awk '{print $1,$NF}' employee.txt
Wyjście:
ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000
w powyższym przykładzie $1 reprezentuje nazwę, A $NF reprezentuje wynagrodzenie. Wynagrodzenie możemy otrzymać używając $NF, gdzie $NF oznacza ostatnie pole.,
inne użycie wbudowanych zmiennych NR (wyświetlanie linii od 3 do 6)
$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt
Wyjście:
3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000
więcej przykładów
dla podanego pliku tekstowego:
$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3
1) Aby wydrukować pierwszą pozycję wraz z numerem wiersza(nr) oddzielonym ” – ” od każdej linii w GeeksforGeeks.txt:
$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen
2) aby zwrócić drugi wiersz/pozycję z geeksforgeeks.,est linia obecna w pliku:
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13
5) aby policzyć linie w pliku:
$ awk 'END { print NR }' geeksforgeeks.txt
3
6) Drukowanie linii z więcej niż 10 znaków:
$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3
7) aby znaleźć/sprawdzić dowolny ciąg w dowolnej kolumnie:
$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt
8) aby wydrukować kwadraty liczb pierwszych od 1 do n powiedz 6:
$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36
Ten artykuł został napisany przez anshika Goyal i Praveen negi., Jeśli lubisz GeeksforGeeks i chciałbyś przyczynić się do tego, możesz również napisać artykuł za pomocą contribute.geeksforgeeks.org lub wyślij artykuł do [email protected]. Zobacz swój artykuł pojawiający się na stronie głównej GeeksforGeeks i pomóż innym Geekom.