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.