Articles

awk scripting wyjaśnione z praktycznych przykładów

Posted on

Awk polecenie / narzędzie jest używane do manipulowania wierszy i kolumn tekstu w pliku. Awk ma wbudowane funkcje łańcuchowe i tablice asocjacyjne. Awk obsługuje większość operatorów, bloków warunkowych i dostępnych w języku C. awk scripting

awk scripting

Jedną z dobrych rzeczy jest to, że możemy używać komendy awk wraz z innymi komendami, aby osiągnąć wymagany wynik. Możemy również przekonwertować skrypt awk na perl.

Podstawowa składnia awk: 'BEGIN {start_action} {akcja} END {stop_action}' nazwa_pliku

Tutaj są działania

  • Begin blok jest wykonywany przed plikiem
  • End blok jest wykonywany po przetworzeniu pliku
  • Reszta działań jest wykonywana podczas przetwarzania pliku

Przykłady: Utwórz plik o nazwie test w nim poniższe dane

# cat test

Z powyższych danych można zauważyć, że plik ma wiersze i kolumny oddzielone spacją, a wiersze są nowymi liniami. Aby wyjaśnić ten artykuł użyjemy pliku testowego dla kilku przykładów.

Składnia polecenia: awk '{print $3}' test

Tutaj $3 ma znaczenie print 3rd columns out of all the columns from test file. Jeśli chcesz wydrukować wiele kolumn, podaj nazwy kolumn oddzielone przecinkami $1,$2,$3….. Poniżej znajduje się wyjście, które jako 3 kolumna we wszystkich wierszach

# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr

Aby wydrukować 4 i 6 kolumnę w pliku użyj awk '{print $4,$6}' test

Tutaj bloki begin i end nie są używane w awk. Tak więc, polecenie print będzie wykonywane dla każdego wiersza odczytanego z pliku. W następnym przykładzie zobaczymy jak używać bloków begin i end.

Wydrukuj sumę wartości kolumny

Składnia polecenia: awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test

Powyższy przykład spowoduje wypisanie sumy wartości z siódmej kolumny. W bloku startowym zmiennej suma przypisana jest wartość 0. W następnym bloku do zmiennej suma dodawana jest wartość z 7 kolumny. To dodawanie 7. kolumny do zmiennej suma powtarza się dla każdego przetwarzanego wiersza. Kiedy wszystkie wiersze zostaną przetworzone, zmienna suma będzie zawierała sumę wartości z 7. kolumny. Wartość ta jest wypisywana w bloku End, jak pokazano poniżej:

# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300

Sumowanie wartości kolumny przy użyciu skryptu awk

W drugim przykładzie widzieliśmy, jak SUMOWAĆ wartość siódmej kolumny, w ten sam sposób zamiast pisać w jednej linii, piszemy jako skrypt. Utwórz plik sumofcolumn i wklej poniższy skrypt do tego pliku

#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}

Teraz wykonaj skrypt używając polecenia awk jak pokazano poniżej

# awk -f sumofcolumn test300

To uruchomi skrypt w pliku sumofcolumn i wyświetli sumę 7 kolumny w teście.

Znajdź ciąg znaków i wypisz dopasowaną linię

Składnia polecenia: awk '{if($9 == „arkit”) print $0;}' test

Powyższy przykład sprawdzi czy w 3 kolumnie znajduje się ciąg znaków „arkit” i jeśli znajdzie dopasowanie to wypisze całą linię. Wyjście tego polecenia awk jest poniżej

# awk '{ if($3 == "arkit") print $0;}' test

Pętla for z mnożeniem wspomnianej wartości zwiększonej o +1

Składnia polecenia: awk 'BEGIN { for(i=1;i<=10;i++) print „Mnożona wartość”, i, „wynosi”,i*i; }'

Powyższe polecenie wypisze mnożnik liczb pierwszych od 1 do 10. i++ doda +1 do liczby tak, że będzie ona rosła aż do 10. Wyjście komendy jest poniżej

# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1

6. Separator pól wejściowych

Widziałeś już $0,$1,$2… które drukują całą linię, pierwszą kolumnę, drugą kolumnę… odpowiednio. Teraz zobaczymy inne wbudowane zmienne z przykładami.

Jak w naszym przykładowym pliku testowym mamy kolumny, które są oddzielone spacją, ale zamiast spacji, jeśli masz jakikolwiek inny symbol jak .i.e. : , – możemy użyć ich do oddzielenia i wydrukowania.

Przykład: jeśli masz : (dwukropek) jako separator to użyj poniższego

awk 'BEGIN {FS=”:”} {print $2}' test

OR

awk -F: '{print $2}' test

to wydrukuje dane wyjściowe jak poniżej

# awk -F: '{print $2}' test41 file12

OFS – Zmienna separatora pól wyjściowych

Domyślnie, gdy drukujemy pola za pomocą instrukcji print, pola są wyświetlane ze znakiem spacji jako separatorem. Na przykład

Składnia polecenia: awk '{print $4,$5}' test

# awk '{print $4,$5}' testroot 0

Możemy zmienić to domyślne zachowanie używając zmiennej OFS jako

Składnia polecenia: awk 'BEGIN {OFS=”:”} {print $4,$5}' test

# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0

Uwaga: print $4,$5 i print $4$5 nie będą działać tak samo. Pierwszy z nich wyświetla dane wyjściowe ze spacją jako ogranicznikiem. Drugi wyświetla dane wyjściowe bez ogranicznika.

NF – Liczba pól

NF może być użyty do określenia liczby pól w każdym wierszu poniżej znajduje się przykład polecenia

# awk '{print NF}' test9

NR – number of records count

NR może być użyte do określenia numeru linii lub liczby linii w pliku

# awk '{print NR}' test12345678910

Powyższy przykład wyświetli numer linii, w pliku testowym mamy dziesięć linii.

Wydruk liczby rekordów w danym pliku

Jeśli widzisz powyższy przykład z 9 sekcji to wydrukowane są wszystkie numery linii, ale wymaganiem jest, że chciałbym zobaczyć tylko liczbę rekordów.

# awk 'END {print NR}' test10

To wyświetli całkowitą liczbę linii w pliku testowym.

Funkcje łańcuchowe w Awk:

Niektóre z funkcji łańcuchowych w awk to:

  • index(string,szukaj)
  • length(string)
  • split(string,tablica,separator)
  • substr(string,position)
  • substr(string,position,max)
  • tolower(string)
  • toupper(string)

Przykłady zaawansowane:

Filtrowanie wierszy przy użyciu funkcji Awk split

Funkcja awk split dzieli ciąg znaków na tablicę przy użyciu delimitera.

Składnia funkcji split to
split(string, array, delimiter)

Zobaczymy teraz na przykładzie jak filtrować wiersze przy użyciu funkcji split.

Wejście „advanced.txt” zawiera dane w następującym formacie

# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444

Wymagane wyjście: Teraz musimy wydrukować tylko te wiersze, w których 2. pole ma ciąg „ARKIT” jako 3. pole.

The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222

Komenda awk do uzyskania danych wyjściowych jest poniżej

Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222

Kilka komend awk / przykładów narzędzi, które zobaczymy w nadchodzącym poście Stay tune.

Słowa kluczowe: awk scripting in linux,how to run a awk script in linux,how to write an awk script in linux,awk in linux bash,awk in linux command,awk script examples linux,awk in linux example,awk in linux means,awk in linux pdf,awk in linux programming,awk w linuxie ppt,awk w linuxie shell script,awk komenda w linuxie shell scripting,awk w linuxie tutorial,awk w linuxie terminal,awk w linuxie z przykładami,awk scripting,awk scripting,awk scripting,awk scripting,awk scripting,awk scripting

Dzięki za przeczytanie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *