W tym artykule wyjaśnimy podstawowe użycie polecenia AWK i sposób, w jaki można je użyć do podziału pliku ciągów. Przeprowadziliśmy przykłady z tego artykułu na temat systemu debian 10 Buster, ale można je łatwo odtworzyć na większości dystrybucji Linux.
Przykładowy plik, którego będziemy używać
Przykładowy plik ciągów, których będziemy używać, aby zademonstrować użycie polecenia AWK, jest następujący:
To właśnie wskazuje każda kolumna przykładowego pliku:
Przykład 1: Użyj AWK, aby wydrukować wszystkie wiersze pliku
Drukowanie każdego wiersza określonego pliku jest domyślnym zachowaniem polecenia AWK. W poniższej składni polecenia AWK nie określamy żadnego wzoru, który AWK powinien wydrukować, dlatego polecenie ma zastosować akcję „Wydrukuj” do wszystkich wierszy pliku.
Składnia:
$ awk 'print ”nazwa pliku.tekst
Przykład:
W tym przykładzie mówię komendzie AWK, aby wydrukować zawartość mojego przykładowego pliku, wiersz po wierszu.
$ awk 'print' próbka.tekst
Przykład 2: Użyj AWK, aby wydrukować tylko linie pasujące do danego wzoru
Dzięki AWK możesz określić wzór, a polecenie wydrukuje tylko wiersze pasujące do tego wzoru.
Składnia:
$ awk '/ wzór_to_be_matched/ print' nazwa pliku.tekst
Przykład:
Z przykładowego pliku, jeśli chcę wydrukować tylko wiersze zawierające zmienną „B”, mogę użyć następującego polecenia:
$ awk '/ b/ print' próbka.tekst
Aby uczynić przykład bardziej znaczącym, pozwól mi wydrukować tylko informacje o pracownikach, którzy są profesorem.
$ awk '/ profesor/ print' próbka.tekst
Polecenie wydrukuje tylko wiersze/wpisy zawierające ciąg „Profesor”, dlatego mamy bardziej cenne informacje pochodzące z danych.
Przykład 3. Użyj AWK, aby podzielić plik, aby wydrukowano tylko określone pola/kolumny
Zamiast drukować cały plik, możesz zrobić AWK do drukowania tylko określonych kolumn pliku. AWK traktuje wszystkie słowa, oddzielone białą przestrzenią, domyślnie w wierszu jako rekord kolumny. Przechowuje rekord w zmiennej $ n. Gdzie 1 $ reprezentuje pierwsze słowo, 2 $ przechowuje drugie słowo, 3 $ czwarte i tak dalej. 0 USD przechowuje całą linię, aby drukowana jest linia WHO, jak wyjaśniono w przykładzie 1.
Składnia:
$ awk 'print $ n,… .' Nazwa pliku.tekst
Przykład:
Następujące polecenie wydrukuje tylko pierwszą kolumnę (nazwę) i drugą kolumnę (przedmiot) mojego przykładowego pliku:
$ awk 'drukuj 1 $, 2 $.tekst
Przykład 4: Użyj AWK, aby zliczyć i wydrukować liczbę linii, w których dopasowany jest wzór
Możesz powiedzieć AWK, aby policzyli liczbę linii, w których określony wzór jest dopasowany, a następnie wyprowadzić, że „liczba”.
Składnia:
$ awk '/wzór_to_be_matched/++ cnt end print "count =", cnt'
Nazwa pliku.tekst
Przykład:
W tym przykładzie chcę policzyć liczbę osób uczących temat „angielskiego”. Dlatego powiem poleceniu AWK do dopasowania wzoru „angielskiego” i wydrukowania liczby linii, w których ten wzór jest dopasowany.
$ awk '/angielski/++ cnt end print "count =", cnt' próbka.tekst
Liczba tutaj sugeruje, że 2 osoby uczą angielskiego z przykładowych rekordów plików.
Przykład 5: Użyj AWK do drukowania tylko linii z więcej niż określoną liczbą znaków
Do tego zadania będziemy używać wbudowanej funkcji AWK o nazwie „długość”. Ta funkcja zwraca długość ciągu wejściowego. Tak więc, jeśli chcemy, aby AWK drukował tylko linie z więcej niż liczbą niż liczbę znaków, możemy użyć funkcji długości w następujący sposób:
Do drukowania linii z znakami większą niż liczba:
$ awk 'długość (0 $)> n' nazwa pliku.tekst
Do drukowania linii z znakami mniejszą niż liczba:
$ AWK 'Długość (0 USD) < n' filename.txt
Gdzie n jest liczbą znaków, które chcesz określić dla linii.
Przykład:
Poniższe polecenie wydrukuje tylko wiersze z mojego przykładowego pliku, które mają znaki więcej niż 30:
$ awk 'długość (0 $)> 30' próbka.tekst
Przykład 6: Użyj AWK, aby zapisać wyjście polecenia w innym pliku
Korzystając z operatora przekierowania „>”, możesz użyć polecenia AWK, aby wydrukować jego dane wyjściowe na innym pliku. W ten sposób możesz go użyć:
$ awk 'criteria_to_print „nazwa pliku.TXT> PLIFILE.tekst
Przykład:
W tym przykładzie będę używać operatora przekierowania z moim poleceniem AWK, aby drukować tylko nazwiska pracowników (kolumna 1) do nowego pliku:
$ AWK 'drukuj 1 $' PLACK_FILE.TXT> Employe_names.tekst
Weryfikowałem za pośrednictwem poleceń CAT, że nowy plik zawiera tylko nazwy pracowników.
Przykład 7: Użyj AWK do drukowania tylko nie pustych linii z pliku
AWK ma kilka wbudowanych poleceń, których można użyć do filtrowania wyjścia. Na przykład polecenie NF służy do utrzymania liczby pól w bieżącym rekordie wejściowym. Tutaj użyjemy polecenia NF, aby wydrukować tylko nieokreślone wiersze pliku:
$ awk 'nf> 0' próbka.tekst
Oczywiście możesz użyć następującego polecenia, aby wydrukować puste wiersze:
$ awk 'nf < 0' sample_file.txt
Przykład 8: Użyj AWK, aby zliczyć całkowitą linie w pliku
Kolejna wbudowana funkcja o nazwie NR utrzymuje liczbę rekordów wejściowych (zwykle linii) danego pliku. Możesz użyć tej funkcji w AWK jako obserwującym, aby zliczyć liczbę linii w pliku:
$ awk 'end print nr' próbka.tekst
To była podstawowa informacja, którą musisz zacząć od podziału plików z poleceniem AWK. Możesz użyć kombinacji tych przykładów, aby pobrać bardziej znaczące informacje z pliku stringów za pośrednictwem AWK.