Awk

Jak podzielić plik ciągów za pomocą Awk

Jak podzielić plik ciągów za pomocą Awk
Linuksowe polecenie awk (w skrócie nazwy deweloperów; Aho, Weinberger i Kernighan) to świetny sposób na przetwarzanie i analizowanie pliku łańcuchów. Aby pliki były bardziej informacyjne, muszą być zorganizowane w postaci wierszy i kolumn. Następnie możesz użyć awk na tych plikach, aby:

W tym artykule wyjaśnimy podstawowe użycie polecenia awk i jak można go użyć do dzielenia pliku łańcuchów. Wykonaliśmy przykłady z tego artykułu na systemie Debian 10 Buster, ale można je łatwo replikować w większości dystrybucji Linuksa.

Przykładowy plik, którego będziemy używać

Przykładowy plik łańcuchów, którego użyjemy, aby zademonstrować użycie polecenia awk, jest następujący:

Oto, co wskazuje każda kolumna przykładowego pliku:

Przykład 1: Użyj Awk do wydrukowania wszystkich wierszy 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 wzorca, który powinien wydrukować awk, dlatego polecenie ma zastosować akcję „print” do wszystkich wierszy pliku.

Składnia:

$ awk 'print' nazwa pliku.tekst

Przykład:

W tym przykładzie mówię poleceniu awk, aby wypisało zawartość mojego przykładowego pliku wiersz po wierszu.

$ awk 'print' przykładowy_plik.tekst

Przykład 2:  Użyj awk, aby wydrukować tylko te wiersze, które pasują do danego wzorca

Za pomocą awk możesz określić wzorzec, a polecenie wypisze tylko linie pasujące do tego wzorca.

Składnia:

$ awk '/wzorzec_do_dopasowania/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' przykładowy_plik.tekst

Aby przykład był bardziej znaczący, pozwolę sobie wydrukować tylko informacje o pracownikach, którzy są „profesorami”.

$ awk '/professor/ print' przykładowy_plik.tekst

Polecenie drukuje tylko wiersze/wpisy zawierające ciąg „profesor”, dzięki czemu mamy bardziej wartościowe informacje pochodzące z danych.

Przykład 3. Użyj awk, aby podzielić plik tak, aby drukowane były tylko określone pola/kolumny

Zamiast drukować cały plik, możesz sprawić, by awk wypisał tylko określone kolumny pliku. Awk domyślnie traktuje wszystkie słowa oddzielone spacją w wierszu jako rekord kolumny record. Przechowuje rekord w zmiennej $N. Gdzie $1 reprezentuje pierwsze słowo, $2 przechowuje drugie słowo, $3 czwarte i tak dalej. $0 przechowuje całą linię, więc wydrukowana jest linia who, jak wyjaśniono w przykładzie 1.

Składnia:

$ awk 'print $N,.. .' Nazwa pliku.tekst

Przykład:

Następujące polecenie wyświetli tylko pierwszą kolumnę (nazwa) i drugą kolumnę (temat) mojego przykładowego pliku:

$ awk 'print $1, $2' sample_file.tekst

Przykład 4: Użyj Awk, aby policzyć i wydrukować liczbę wierszy, w których dopasowany jest wzorzec

Możesz nakazać awk zliczenie liczby wierszy, w których dopasowany jest określony wzorzec, a następnie wypisanie tego „liczba”.

Składnia:

$ awk '/pattern_to_be_matched/++cnt END print "Count = ", cnt'
Nazwa pliku.tekst

Przykład:

W tym przykładzie chcę policzyć liczbę osób uczących przedmiotu „angielski”. Dlatego powiem poleceniu awk, aby pasowało do wzorca „angielski” i wypisał liczbę wierszy, w których ten wzorzec jest dopasowany.

$ awk '/english/++cnt END print "Count = ", cnt' sample_file.tekst

Liczba tutaj sugeruje, że 2 osoby uczą angielskiego z przykładowych zapisów pliku.

Przykład 5: Użyj awk, aby wydrukować tylko wiersze zawierające więcej niż określoną liczbę znaków

W tym zadaniu użyjemy wbudowanej funkcji awk o nazwie „długość”. Ta funkcja zwraca długość ciągu wejściowego. Tak więc, jeśli chcemy, aby awk wypisywał tylko wiersze o większej lub nawet mniejszej liczbie znaków, możemy użyć funkcji length w następujący sposób:

Do drukowania wierszy ze znakami większymi niż liczba:

$ awk 'length($0) > n' nazwa pliku file.tekst

Do drukowania wierszy ze znakami mniejszymi niż liczba:

$ awk 'długość($0) < n' filename.txt

Gdzie n to liczba znaków, które chcesz określić w wierszu.

Przykład:

Następujące polecenie wyświetli tylko wiersze z mojego przykładowego pliku, które mają więcej niż 30 znaków:

$ awk 'długość($0) > 30' przykładowy_plik.tekst

Przykład 6: Użyj awk, aby zapisać wynik polecenia w innym pliku

Używając operatora przekierowania '>', możesz użyć polecenia awk, aby wydrukować wyjście do innego pliku. Oto sposób, w jaki możesz go użyć:

$ awk nazwa pliku „kryteria_do_drukowania”.txt > plik wyjściowy.tekst

Przykład:

W tym przykładzie użyję operatora przekierowania z moim poleceniem awk, aby wydrukować tylko imiona i nazwiska pracowników (kolumna 1) do nowego pliku:

$ awk 'print $1' sample_file.txt > nazwiska pracowników.tekst

Sprawdziłem komendami cat, że nowy plik zawiera tylko imiona i nazwiska pracowników.

Przykład 7: Użyj awk do wypisania tylko niepustych wierszy z pliku

Awk ma kilka wbudowanych poleceń, których można użyć do filtrowania danych wyjściowych. Na przykład polecenie NF służy do zliczania pól w bieżącym rekordzie wejściowym. Tutaj użyjemy polecenia NF, aby wydrukować tylko niepuste wiersze pliku:

$ awk 'NF > 0' przykładowy_plik.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 do policzenia wszystkich wierszy w pliku

Inna wbudowana funkcja o nazwie NR zlicza liczbę rekordów wejściowych (zwykle wierszy) danego pliku. Możesz użyć tej funkcji w awk w następujący sposób, aby zliczyć liczbę wierszy w pliku:

$ awk 'END print NR ' przykładowy_plik.tekst

To były podstawowe informacje potrzebne do rozpoczęcia dzielenia plików za pomocą polecenia awk. Możesz użyć kombinacji tych przykładów, aby pobrać bardziej znaczące informacje z pliku łańcuchów za pomocą awk.

Gry How to Show FPS Counter in Linux Games
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...
Gry How to download and Play Sid Meier's Civilization VI on Linux
How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...
Gry How to Install and Play Doom on Linux
How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...