w systemie operacyjnym Linux istnieje wiele narzędzi użytkowych do wyszukiwania i generowania raportu z danych tekstowych lub plików. Użytkownik może łatwo wykonywać wiele rodzajów zadań wyszukiwania, zastępowania i generowania raportów za pomocą poleceń awk, grep i sed. awk to nie tylko polecenie. Jest to język skryptowy, który może być używany zarówno z terminala, jak i pliku awk. Wspiera zmienną, instrukcję warunkową, tablicę, pętle itd. podobnie jak inne języki skryptowe., Może odczytać dowolną zawartość pliku wiersz po wierszu i oddzielić pola lub kolumny na podstawie określonego ogranicznika. Obsługuje również wyrażenia regularne do przeszukiwania określonego ciągu znaków w treści tekstowej lub pliku i podejmuje działania, jeśli jakiekolwiek dopasowanie znajdzie. Jak możesz używać komendy i skryptu awk pokazano w tym samouczku za pomocą 20 użytecznych przykładów.,a

  • awk z danymi csv
  • awk regex
  • awk bez rozróżniania wielkości liter
  • awk ze zmienną NF (liczba pól)
  • awk gensub() funkcja
  • awk z funkcją rand ()
  • awk funkcja zdefiniowana przez użytkownika
  • awk if
  • zmienne awk
  • tablice awk
  • pętla awk
  • awk wydrukować pierwszą kolumnę
  • awk wydrukować ostatnią kolumnę
  • awk z grep
  • awk z plikiem skryptu bash
  • awk z sed
  • za pomocą awk z printf

    funkcja printf() jest używana do formatowania dowolnego wyjścia w większości języków programowania., Funkcja ta może być używana z poleceniem awk do generowania różnych typów sformatowanych wyjść. polecenie awk używane głównie dla dowolnego pliku tekstowego. Utwórz plik tekstowy o nazwie pracownik.txt z zawartością podaną poniżej, gdzie pola są oddzielone tabulatorem (’\t').

    pracownik.txt

    1001 John sena 40000
    1002 Jafar Iqbal 60000
    1003 Meher Nigar 30000
    1004 Jonny Liver 70000

    poniższe polecenie awk odczyta dane z pracownika.txt plik linia po linii i wydrukować pierwszy złożony po formatowaniu. Tutaj,” %10s\n ” oznacza, że wyjście będzie miało długość 10 znaków., Jeśli wartość wyjściowa jest mniejsza niż 10 znaków, spacje zostaną dodane z przodu wartości.

    $ awk '{printf „%10s\N”, $1 }’txt

    Wyjście:

    przejdź do treści

    awk, aby podzielić na białe spacje

    domyślnym separatorem słów lub pól do dzielenia dowolnego tekstu jest biała spacja. polecenie awk może przyjmować wartość tekstową jako wartość wejściową na różne sposoby. Tekst wejściowy jest przekazywany z polecenia echo w poniższym przykładzie., Tekst „Lubię programowanie” zostanie podzielony przez domyślny separator, spację, a trzecie słowo zostanie wydrukowane jako wyjście.

    $ echo 'Lubię programowanie' | awk '{ print $3 }'

    Wyjście:

    przejdź do treści

    awk, aby zmienić ogranicznik

    polecenie awk może być użyte do zmiany ogranicznika dla dowolnej zawartości pliku. Załóżmy, że masz plik tekstowy o nazwie telefon.txt o następującej zawartości, gdzie ':' jest używany jako separator pól zawartości pliku.

    telefon.,txt

    +123:334:889:778
    +880:1855:456:907
    +9:7777:38644:808

    uruchom następujące polecenie awk, aby zmienić ogranicznik,': 'przez' – ' na zawartość pliku, phone.txt.

    $ cat phone.txt
    $ awk '$1=$1 ' FS=”: „OFS=” – ” phone.txt

    Wyjście:

    przejdź do treści

    awk z danymi rozdzielanymi tabulatorami

    polecenie awk ma wiele wbudowanych zmiennych, które są używane do odczytu tekstu na różne sposoby. Dwa z nich to FS i OFS., FS to separator pola wejściowego, a OFS to zmienne separatora pola wyjściowego. Zastosowania tych zmiennych są pokazane w tej sekcji. Utwórz oddzielony tabulatorem plik o nazwie input.txt z nastÄ ™ pujÄ … cÄ … zawartoĹ „ciÄ … do testowania zastosowaĹ” zmiennych FS i OFS.

    Input.txt

    język skryptowy po stronie Klienta
    język skryptowy po stronie serwera
    serwer bazy danych
    Serwer Www

    używając zmiennej FS z zakładką

    poniższe polecenie podzieli każdą linię wejścia.plik txt oparty na zakładce (’\t') i wypisuje pierwsze pole każdej linii.,

    $ awk '{ print $1 }' FS=’\t' input.txt

    Wyjście:

    Użycie zmiennej OFS z tabulatorem

    następujące polecenie awk wyświetli 9.i 5. pola wyjścia polecenia 'ls-l' z separatorem tabulatorów po wydrukowaniu tytułu kolumny „Nazwa” i „rozmiar”. Tutaj zmienna OFS jest używana do formatowania wyjścia za pomocą zakładki.,

    $ ls-l
    $ ls-l | awk-V OFS=’\t' 'BEGIN { printf „%s\T%S\n”, „Nazwa”, „Rozmiar”} {print $9,$5}'

    Wyjście:

    iv id=”d425c48cc0″

    przejdź do zawartości

    awk z danymi CSV

    zawartość dowolnego pliku CSV może być przetwarzana na wiele sposobów za pomocą polecenia AWK. Utwórz plik CSV o nazwie ' customer.csv ' o następującej treści do zastosowania polecenia awk.

    klient.txt

    odczyt pojedynczego pola pliku CSV

    opcja'-F' jest używana z poleceniem awk do ustawiania ogranicznika dzielenia każdej linii pliku., Następujące polecenie awk wyświetli pole nazwy klienta.plik csv.

    $ klient cat.csv
    $ awk-F”, „'{print $2} ' klient.csv

    Wyjście:

    odczyt wielu pól przez połączenie z innym tekstem

    następujące polecenie wyświetli trzy pola klienta.csv łącząc tekst tytułu, imię i nazwisko, adres e-mail i telefon. Pierwsza linia klienta.plik csv zawiera tytuł każdego pola. Zmienna NR zawiera numer linii Pliku, gdy polecenie awk przetwarza plik., W tym przykładzie zmienna NR służy do pominięcia pierwszej linii pliku. Wyjście wyświetli 2., 3. i 4. pola wszystkich linii z wyjątkiem pierwszej linii.

    $ awk-F „,” 'NR>1 {print „Nazwa:” $2 „, Email:” $3 „, Telefon:” $4}' klient.csv

    Wyjście:

    odczyt pliku CSV za pomocą skryptu awk

    skrypt awk może być uruchomiony przez uruchomienie pliku awk. Jak można utworzyć plik awk i uruchomić ten plik pokazano w tym przykładzie. Utwórz plik o nazwie awkcsv.awk z następującym kodem., Słowo kluczowe BEGIN jest używane w skrypcie do informowania komendy awk o wykonaniu skryptu części BEGIN przed wykonaniem innych zadań. W tym przypadku separator pól (FS) jest używany do definiowania separatora dzielenia, a 2.i 1. pola będą drukowane zgodnie z formatem używanym w funkcji printf ().

    awk
    BEGIN {FS=”,”} {printf „%5s (%s)\n”, $2,$1}

    Uruchom awkcsv.plik awk z treścią klienta.plik csv za pomocą następującego polecenia.

    $ awk-f awkcsv.klient awk.,csv

    Wyjście:

    przejdź do treści

    awk regex

    Wyrażenie regularne jest wzorcem, który służy do wyszukiwania dowolnego ciągu w tekście. Różne rodzaje skomplikowanych zadań wyszukiwania i zastępowania można wykonać bardzo łatwo za pomocą wyrażenia regularnego. Niektóre proste zastosowania wyrażenia regularnego z poleceniem awk są pokazane w tej sekcji.

    pasujący zestaw znaków

    następujące polecenie dopasuje słowo Fool lub bool lub Cool Do ciągu wejściowego i wyświetli je, jeśli słowo zostanie znalezione., Tutaj lalka nie pasuje i nie drukuje.

    $ printf „Fool\ncool\nDoll\nbool” | awk '/ool/'

    Wyjście:

    szukanie ciągu na początku linii

    ’^' symbol jest używany w wyrażeniu regularnym do wyszukiwania dowolnego wzorca na początku linii. Słowo 'Linux' będzie wyszukiwane na początku każdej linii tekstu w poniższym przykładzie. Tutaj, dwa wiersze rozpoczynają się od tekstu, 'Linux' i te dwa wiersze zostaną wyświetlone na wyjściu.,

    $ echo-e „Linux jest wolny w użyciu\N jest to oprogramowanie open-source\nLinuxHint jest
    popularna strona bloga” | awk '/^Linux/'

    Wyjście:

    szukający łańcuch na końcu wiersza

    symbol’$' jest używany w wyrażeniu regularnym do wyszukiwania dowolnego wzorca na końcu każdego wiersza tekstu. Słowo' Script ' jest wyszukiwane w poniższym przykładzie. Tutaj, dwie linie zawierają słowo, skrypt na końcu linii.,

    $ echo-e „PHP Script\Njavascript\N programowanie wirtualne” | awk '/Script$/'

    Wyjście:

    wyszukiwanie poprzez pominięcie określonego zestawu znaków

    ’^' symbol wskazuje początek tekstu, gdy jest on używany przed dowolnym wzorem łańcucha znaków (’/^…/') lub przed dowolnym zestawem znaków zadeklarowanym przez ^. Jeśli symbol ' ^ ' jest użyty wewnątrz trzeciego nawiasu, wtedy zdefiniowany zestaw znaków wewnątrz nawiasu zostanie pominięty podczas wyszukiwania., Poniższe polecenie przeszukuje każde słowo, które nie zaczyna się od 'F', ale kończy się na 'ool'. Cool i bool zostaną wydrukowane zgodnie ze wzorem i danymi tekstowymi.

    $ printf „Fool\ncool\nDoll\nbool” | awk '/ool/'

    Wyjście:

    przejdź do treści

    regex niewrażliwy na wielkość liter awk

    domyślnie Wyrażenie regularne wyszukuje wielkość liter podczas przeszukiwania dowolnego wzorca w łańcuchu. Wyszukiwanie niewrażliwe na wielkość liter może być wykonane przez polecenie awk z wyrażeniem regularnym., W poniższym przykładzie funkcja tolower () jest używana do wyszukiwania bez rozróżniania wielkości liter. Tutaj, pierwsze słowo każdej linii tekstu wejściowego zostanie przekonwertowane na małe litery za pomocą funkcji tolower() i dopasowane do wzorca wyrażenia regularnego. funkcja toupper() może być również użyta do tego celu, w tym przypadku wzór musi być zdefiniowany przez wszystkie wielkie litery. Tekst zdefiniowany w poniższym przykładzie zawiera szukane słowo ” web ” w dwóch wierszach, które zostaną wydrukowane jako wyjście.,

    $ echo-e „Web Design\nweb development\nframework” | awk 'tolower($0) ~ /^web/;'

    Wyjście:

    przejdź do treści

    awk ze zmienną NF (number of fields)

    NF jest wbudowaną zmienną polecenia awk, która służy do zliczania całkowitej liczby pól w każdej linii tekstu wejściowego. Utwórz dowolny plik tekstowy z wieloma wierszami i wieloma słowami. wejście.używany jest tu plik txt, który został utworzony w poprzednim przykładzie.,

    używając NF z wiersza poleceń

    tutaj, pierwsze polecenie jest używane do wyświetlenia zawartości wejścia.plik txt i drugie polecenie są używane do pokazania całkowitej liczby pól w każdej linii pliku przy użyciu zmiennej NF.

    $ cat input.txt
    $ awk '{print NF}' input.txt

    Wyjście:

    używając NF w pliku awk

    Utwórz plik awk o nazwie count.awk ze skryptem podanym poniżej. Gdy skrypt zostanie uruchomiony z dowolnymi danymi tekstowymi, każda zawartość linii z sumą pól zostanie wydrukowana jako wyjście.

    licz.,awk

    {print $0}
    {print „”}

    Uruchom skrypt za pomocą następującego polecenia.

    $ awk-f count.wejście awk.txt

    Output:

    przejdź do treści

    funkcja awk gensub ()

    getsub() jest funkcją zastępczą, która jest używana do wyszukiwania ciągu znaków na podstawie określonego ogranicznika lub wzorca wyrażenia regularnego. Ta funkcja jest zdefiniowana w pakiecie 'gawk', który nie jest instalowany domyślnie. Składnia tej funkcji jest podana poniżej., Pierwszy parametr zawiera wzorzec wyrażenia regularnego lub ogranicznik wyszukiwania, drugi parametr zawiera tekst zastępczy, trzeci parametr wskazuje, w jaki sposób zostanie przeprowadzone wyszukiwanie, a ostatni parametr zawiera tekst, w którym zostanie zastosowana ta funkcja.

    składnia:

    gensub(regexp, replacement, how)

    uruchom następujące polecenie, aby zainstalować pakiet gawk za pomocą funkcji getsub() z poleceniem awk.

    $ sudo apt-get install gawk

    Utwórz plik tekstowy o nazwie 'salesinfo.,txt ' z poniższą treścią, aby przećwiczyć ten przykład. Tutaj pola są oddzielone tabulatorem.

    salesinfo.txt

    Pon 700000
    WT 800000
    Śr 750000
    Czw 200000
    PT 430000
    sob 820000

    uruchom następujące polecenie, aby odczytać pola liczbowe salesinfo.plik txt i wydrukuj sumę wszystkich kwot sprzedaży. Tutaj trzeci parametr, 'G' wskazuje globalne wyszukiwanie. Oznacza to, że wzorzec będzie przeszukiwany w pełnej zawartości pliku.,

    $ awk '{ x=gensub(„\T”,””,”G”,$2); printf x „+” } END{ print 0 }' salesinfo.txt / bc -l

    Wyjście:

    przejdź do treści

    awk z funkcją rand ()

    funkcja rand() jest używana do generowania dowolnej liczby losowej większej niż 0 i mniejszej niż 1. Tak więc zawsze wygeneruje liczbę ułamkową mniejszą niż 1. Poniższe polecenie wygeneruje ułamkową liczbę losową i pomnoży wartość przez 10, aby uzyskać liczbę większą niż 1., Liczba ułamkowa z dwoma cyframi po przecinku zostanie wydrukowana dla zastosowania funkcji printf (). Jeśli wykonasz następujące polecenie wiele razy, za każdym razem otrzymasz inne wyjście.

    $ awk 'BEGIN {printf „Number is =%.2f\n” , rand()*10}'

    Wyjście:

    przejdź do treści

    funkcja zdefiniowana przez użytkownika awk

    wszystkie funkcje, które są używane w poprzednich przykładach, są funkcjami wbudowanymi. Ale możesz zadeklarować funkcję zdefiniowaną przez użytkownika w skrypcie awk do wykonania dowolnego konkretnego zadania., Załóżmy, że chcesz utworzyć funkcję niestandardową do obliczania obszaru prostokąta. Aby wykonać to zadanie, Utwórz plik o nazwie 'area.awk ” z następującym skryptem. W tym przykładzie w skrypcie zadeklarowana jest zdefiniowana przez użytkownika funkcja o nazwie area (), która oblicza obszar na podstawie parametrów wejściowych i zwraca wartość area. polecenie getline jest tutaj używane do pobierania danych od użytkownika.

    area.awk

    Uruchom skrypt.

    $ awk-f area.,awk

    Wyjście:

    przejdź do treści

    awk jeśli przykład

    awk obsługuje wyrażenia warunkowe, podobnie jak inne Standardowe języki programowania. W tej sekcji przedstawiono trzy typy instrukcji if przy użyciu trzech przykładów. Utwórz plik tekstowy o nazwie items.txt o następującej treści.

    pozycje.txt

    HDD Samsung $100
    Mysz A4Tech
    Drukarka HP $200

    prosty przykład:

    on następujące polecenie odczyta zawartość elementów.plik txt i sprawdź 3. wartość pola w każdej linii., Jeżeli wartość jest pusta, to wyświetli komunikat o błędzie z numerem linii.

    $ awk '{ if ($3 == „”) print „brakuje pola ceny w wierszu” NR} ” pozycje.txt

    Wyjście:

    if-else przykład:

    następujące polecenie wyświetli cenę elementu, jeśli trzecie pole istnieje w linii, w przeciwnym razie wyświetli komunikat o błędzie.

    $ awk '{ if ($3 == „”) print „brakuje pola ceny”
    else print „Cena elementu to” $3} ” elementów.,txt

    Output:

    if-else-if przykład:

    gdy poniższe polecenie zostanie wykonane z terminala, zostanie ono pobrane od użytkownika. Wartość wejściowa będzie porównywana z każdym warunkiem if, dopóki warunek nie zostanie spełniony. Jeśli jakikolwiek warunek stanie się prawdziwy, wydrukuje odpowiedni stopień. Jeśli wartość wejściowa nie pasuje do żadnego warunku, to print fail.,

    $ awk 'BEGIN { print „Enter the mark:”
    getline mark < „-„
    if (mark >= 90) print „a+”
    else if( mark >= 80) print „a”
    else if( Mark >= 70) print „b+”
    else Print „fail” }'

    wyjście:

    przejdź do treści

    zmienne awk

    deklaracja zmiennej awk jest podobna do deklaracji zmiennej shell. Istnieje różnica w odczycie wartości zmiennej., symbol ' $ ' jest używany z nazwą zmiennej shell do odczytu wartości. Nie ma jednak potrzeby używania ' $ ' ze zmienną awk do odczytu wartości.

    używając prostej zmiennej:

    następujące polecenie zadeklaruje zmienną o nazwie 'site' i do tej zmiennej zostanie przypisana wartość łańcuchowa. Wartość zmiennej zostanie wydrukowana w następnej instrukcji.

    $ awk 'BEGIN{ site=” LinuxHint.,com”; print site}'

    Output:

    używając zmiennej do pobrania danych z pliku

    poniższe polecenie wyszukuje słowo 'Printer' w pozycji pliku.txt. Jeśli którakolwiek linia pliku zaczyna się od 'Printer', to zapisze wartość pól 1st, 2nd i 3RD w trzech zmiennych. zostaną wydrukowane zmienne nazwa i cena.

    $ awk '/ Printer / {name=$1;brand=$2;price=$3;print „item name=” name;
    print „item price=” price }' items.,txt

    Wyjście:

    przejdź do treści

    tablice awk

    zarówno tablice Numeryczne, jak i powiązane mogą być używane w awk. Deklaracja zmiennej Array w awk jest taka sama jak w innych językach programowania. Niektóre zastosowania tablic są pokazane w tej sekcji.

    tablica asocjacyjna:

    indeks tablicy będzie dowolnym łańcuchem znaków dla tablicy asocjacyjnej. W tym przykładzie zadeklarowana i wydrukowana jest tablica asocjacyjna składająca się z trzech elementów.,

    wyjście:

    tablica numeryczna:

    tablica numeryczna składająca się z trzech elementów jest zadeklarowana i wydrukowana przez oddzielenie tabulatora.

    wyjście:

    przejdź do treści

    pętla awk

    trzy typy pętli są obsługiwane przez awk. Zastosowania tych pętli pokazano tutaj za pomocą trzech przykładów.

    pętla While:

    pętla while użyta w poniższym poleceniu będzie powtarzana 5 razy i kończy działanie instrukcji loop for break.,

    $ awk 'BEGIN { N = 1; while (N <= 10) { if(N > 5) break; print n; n++ } }'

    Output:

    dla pętli:

    dla pętli użytej w następującym poleceniu awk wyliczy sumę od 1 do 10 i wyświetli wartość.,

    $ awk 'BEGIN { sum=0; for (N = 1; n <= 10; N++) sum=sum+n; print sum} '

    Wyjście:

    pętla do-while:

    pętla do-while następującego polecenia wyświetli wszystkie liczby parzyste od 10 do 5.,

    $ awk 'BEGIN {counter = 10; do { if (counter%2 ==0) print counter; counter– }
    while (counter > 5) }'

    Wyjście:

    przejdź do treści

    awk aby wydrukować pierwszą kolumnę

    pierwszą kolumnę dowolnego pliku można wydrukować używając zmiennej $1 w awk. Jeżeli jednak wartość pierwszej kolumny zawiera wiele słów, wtedy wyświetla się tylko pierwsze słowo pierwszej kolumny. Za pomocą określonego ogranicznika można poprawnie wydrukować pierwszą kolumnę. Utwórz plik tekstowy o nazwie uczniowie.,txt o następującej treści. Tutaj pierwsza kolumna zawiera tekst dwóch słów.

    studenci.,txt

    Kaniz Fatema 30<sup>th</sup> batch
    Abir Hossain 35<sup>th</sup> batch
    John Abraham 40<sup>th</sup> batch

    Run awk command without any delimiter. The first part of the first column will be printed.,

    $ awk '{print $1}' txt

    Uruchom polecenie awk z następującym ogranicznikiem. Wydrukowana zostanie pełna część pierwszej kolumny.

    $ awk-F '\\s\\s' '{print $1}' txt

    Wyjście:

    przejdź do zawartości

    awk aby wydrukować ostatnią kolumnę

    zmienna$(NF) może być użyta do wydruku ostatniej kolumny dowolnego pliku. Następujące polecenia awk wydrukują ostatnią część i pełną część ostatniej kolumny uczniów.plik txt.,

    $ awk '{print $(NF)}' txt
    $ awk-F '\ \ s\ \ s' '{print $(NF)}’txt

    Wyjście:

    przejdź do zawartości

    awk za pomocą grep

    grep jest kolejnym użytecznym poleceniem Linuksa do wyszukiwania zawartości w pliku na podstawie dowolnego wyrażenia regularnego. Sposób, w jaki polecenia awk i grep mogą być używane razem, przedstawiono w poniższym przykładzie. polecenie grep służy do wyszukiwania informacji o identyfikatorze pracownika, '1002′ od pracownika.plik txt. Wyjście polecenia grep zostanie wysłane do awk jako dane wejściowe., 5% bonus zostanie zliczony i wydrukowany na podstawie wynagrodzenia legitymacji pracowniczej „1002” przez komendę awk.

    $ Cat.txt
    $ grep '1002′ pracownik.txt / awk-F '\t' '{ print $2 ” dostanie $” ($3*5)/100 „bonus”}'

    Wyjście:

    przejdź do zawartości

    awk z plikiem BASH

    podobnie jak inne polecenia linuksowe, polecenie awk może być również używane w skrypcie BASH. Utwórz plik tekstowy o nazwie klienci.txt o następującej treści. Każda linia tego pliku zawiera informacje o czterech polach., Są to identyfikator klienta, nazwa, adres i numer telefonu komórkowego, które są oddzielone przez”/”.

    klienci.txt

    Utwórz plik bash o nazwie item_search.bash z następującym skryptem. Zgodnie z tym skryptem wartość stanu zostanie pobrana od użytkownika i wyszukana w klientach.plik txt za pomocą polecenia grep i przekazany do polecenia awk jako wejście. Polecenie Awk odczyta 2. i 4. pola każdej linii. Jeśli wartość wejściowa pasuje do dowolnej wartości stanu klientów.plik txt następnie wydrukuje nazwę klienta i numer telefonu komórkowego, w przeciwnym razie wydrukuje komunikat „No customer found”.,

    item_search.bash

    uruchom następujące polecenia, aby wyświetlić wyniki.

    $ Cat.txt
    $ bash item_search.bash

    Wyjście:

    przejdź do treści

    awk z sed

    Innym przydatnym narzędziem wyszukiwania Linuksa jest sed. Polecenie to może być używane zarówno do wyszukiwania jak i zastępowania tekstu dowolnego pliku. Poniższy przykład pokazuje użycie komendy awk z Komendą sed. Tutaj polecenie sed przeszukuje wszystkie nazwy pracowników zaczynające się od 'J' i przechodzi do polecenia awk jako wejście., awk wydrukuje nazwę i identyfikator pracownika po formatowaniu.

    $ Cat.txt
    $ sed-N '/J/p'.txt / awk-F '\T ” { printf „%s (%s)\n”, $2, $1 }'

    Wyjście:

    przejdź do treści

    wniosek:

    możesz użyć polecenia awk do tworzenia różnych typów raportów na podstawie dowolnych danych tabelarycznych lub rozdzielonych po poprawnym filtrowaniu danych. Mam nadzieję, że będziesz w stanie dowiedzieć się, jak działa Komenda awk po ćwiczeniu przykładów pokazanych w tym samouczku.

    Articles

    Dodaj komentarz

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