W systemie operacyjnym Linux istnieje wiele narzędzi narzędziowych do wyszukiwania i generowania raportu z danych lub pliku. Użytkownik może łatwo wykonywać wiele rodzajów wyszukiwania, zastępowania i zgłaszania zadań przy użyciu poleceń AWK, GREP i SED. AWK to nie tylko polecenie. Jest to język skryptowy, którego można używać zarówno z pliku terminalu, jak i AWK. Obsługuje zmienną, instrukcję warunkową, tablicę, pętle itp. Podobnie jak inne języki scenariusze. Może odczytać dowolną linię zawartości pliku według linii i oddzielić pola lub kolumny na podstawie określonego ogranicznika. Obsługuje również wyrażenie regularne wyszukiwania określonego ciągu w treści tekstowej lub pliku i podejmuje działania, jeśli znaleziono jakikolwiek mecz. Jak możesz używać polecenia AWK, a skrypt jest pokazany w tym samouczku za pomocą 20 przydatnych przykładów.
Zawartość:
Za pomocą AWK z printf
printf () Funkcja służy do sformatowania dowolnego wyjścia w większości języków programowania. Tej funkcji można użyć z Awk polecenie do generowania różnych rodzajów wyników sformatowanych. polecenie AWK używane głównie dla dowolnego pliku tekstowego. Utwórz plik tekstowy o nazwie pracownik.tekst z zawartością podaną poniżej, gdzie pola są oddzielone przez Tab („\ t”).
pracownik.tekst
1001 John Sena 40000Poniższe polecenie AWK odczytuje dane z pracownik.tekst linia pliku po linii i wydrukuj pierwszy złożony po sformatowaniu. Tutaj, "%10s \ n”Oznacza, że wyjście będzie miało 10 znaków. Jeśli wartość wyjścia jest mniejsza niż 10 znaków, przestrzenie zostanie dodane z przodu wartości.
$ awk 'printf "%10s \ n", 1 $ „.tekstWyjście:
Przejdź do treści
Awk do podziału na białej przestrzeni
Domyślne słowo lub separator pola do podziału dowolnego tekstu to biała przestrzeń. Polecenie AWK może przyjąć wartość tekstową jako dane wejściowe na różne sposoby. Tekst wejściowy jest przekazywany z Echo Polecenie w poniższym przykładzie. Tekst, 'Lubię programowanie„Zostanie podzielony domyślnie separator, przestrzeń, a trzecie słowo zostanie wydrukowane jako wyjście.
$ echo „Lubię programowanie” | awk 'drukuj 3 $'
Wyjście:
Przejdź do treści
AWK, aby zmienić ogranicznik
Polecenie AWK można użyć do zmiany ogranicznika dla dowolnej zawartości pliku. Załóżmy, że masz nazwany plik tekstowy telefon.tekst z następującą zawartością, gdzie „:” jest używany jako separator pola zawartości pliku.
telefon.tekst
+123: 334: 889: 778Uruchom następujące polecenie AWK, aby zmienić ogranicznik, „:” przez '-' do treści pliku, telefon.tekst.
$ CAT Telefon.tekstWyjście:
Przejdź do treści
AWK z danymi podłączonymi przez Tab
Polecenie AWK ma wiele wbudowanych zmiennych, które służą do odczytu tekstu na różne sposoby. Dwa z nich są Fs I Ofs. Fs jest separatorem pola wejściowego i Ofs to zmienne separatora pola wyjściowego. Zastosowania tych zmiennych pokazano w tym rozdziale. Stwórz patka oddzielony plik o nazwie wejście.tekst z następującą zawartością do przetestowania zastosowań Fs I Ofs zmienne.
Wejście.tekst
Język skryptowy po stronie klientaNastępujące polecenie podzieli każdy wiersz wejście.tekst plik oparty na karcie („\ t”) i wydrukuj pierwsze pole każdej linii.
$ awk 'print $ 1' fs = '\ t' wejście.tekst
Wyjście:
Następujące polecenie AWK wydrukuje 9th I 5th Pola „ls -l” Wyjście polecenia z separatorem zakładki po wydrukowaniu tytułu kolumny „Nazwa" I "Rozmiar". Tutaj, Ofs Zmienna służy do sformatowania wyjścia przez kartę.
$ ls -l
$ ls -l | awk -v ofs = '\ t' 'start printf "%s \ t%s \ n", „nazwa”, „rozmiar” drukuj 9 $, 5 $ ”
Wyjście:
Przejdź do treści
AWK z danymi CSV
Treść dowolnego pliku CSV można przeanalizować na wiele sposobów za pomocą polecenia AWK. Utwórz plik CSV o nazwie 'klient.CSV„Z następującą treść, aby zastosować polecenie AWK.
klient.tekst
ID, nazwa, e -mail, telefonCzytanie pojedynczego pola pliku CSV
'-F' Opcja jest używana z poleceniem AWK do ustawienia ograniczenia w celu podziału każdego wiersza pliku. Następujące polecenie AWK wydrukuje nazwa pole klient.CSV plik.
$ CAT Klient.CSV
$ awk -f "," 'drukuj 2 $'.CSV
Wyjście:
Następujące polecenie wydrukuje trzy pola klient.CSV Łącząc tekst tytułowy, Nazwa, e -mail i telefon. Pierwsza linia klient.CSV Plik zawiera tytuł każdego pola. Nr Zmienna zawiera numer linii pliku, gdy polecenie AWK analizuje plik. W tym przykładzie, nr Zmienna służy do pominięcia pierwszego wiersza pliku. Wyjście pokaże 2Nd, 3r & D i 4th Pola wszystkich linii oprócz pierwszej linii.
$ awk -f "," 'nr> 1 drukuj "Nazwa:" $ 2 ", e -mail:„ 3 $ ”, telefon:„ 4 $ ”klient.CSV
Wyjście:
Skrypt AWK można wykonać poprzez uruchomienie pliku AWK. Jak możesz utworzyć plik AWK, a uruchomić plik jest pokazany w tym przykładzie. Utwórz plik o nazwie AWKCSV.Awk z następującym kodem. ZACZYNAĆ Słowo kluczowe jest używane w skrypcie do informowania polecenia AWK do wykonania skryptu ZACZYNAĆ Część najpierw przed wykonaniem innych zadań. Tutaj separator pola (Fs) służy do zdefiniowania rozkładu i 2Nd i 1St Pola zostaną wydrukowane zgodnie z formatem używanym w funkcji printf ().
AWKCSV.AwkUruchomić AWKCSV.Awk plik z treścią klient.CSV plik według następującego polecenia.
$ awk -f awkcsv.klient AWK.CSV
Wyjście:
Przejdź do treści
AWK Regex
Wyrażenie regularne to wzór używany do wyszukiwania dowolnego ciągu w tekście. Różne rodzaje skomplikowanych wyszukiwania i zastępowania zadań można bardzo łatwo wykonać za pomocą wyrażenia regularnego. Niektóre proste zastosowania wyrażenia regularnego z poleceniem AWK pokazano w tej sekcji.
Pasujący zestaw znaków
Poniższe polecenie będzie pasować do słowa Głupiec lub bool Lub Fajny z ciągiem wejściowym i wydrukuj, jeśli słowo zapoznaje się. Tutaj, LALKA nie pasuje i nie drukuje.
$ printf "głupiec \ ncool \ ndoll \ nbool" | awk '/[fbc] ool/'
Wyjście:
„^” Symbol jest używany w wyrażeniu regularnym do wyszukiwania dowolnego wzoru na początku linii. 'Linux ' Słowo zostanie przeszukane na początku każdego wiersza tekstu w poniższym przykładzie. Tutaj dwa wiersze zaczynają się od tekstu, „Linux„I te dwie linie zostaną pokazane na wyjściu.
$ echo -e "Linux może używać \ n Jest to oprogramowanie typu open source \ nlinuxhint
Popularna strona blogowa „| AWK '/^Linux/'
Wyjście:
„$” Symbol jest używany w wyrażeniu regularnym do wyszukiwania dowolnego wzoru na końcu każdego wiersza tekstu. 'Scenariusz„Słowo jest przeszukiwane w poniższym przykładzie. Tutaj dwa wiersze zawierają słowo, Scenariusz Na końcu linii.
$ echo -e "php script \ njavascript \ nvisual Programming" | awk '/script $/'
Wyjście:
„^” Symbol wskazuje początek tekstu, gdy jest używany przed dowolnym wzorem łańcuchowym (' /^… /') lub przed zadeklarowanym przez jakiekolwiek postacie ^[…]. Jeśli „^” Symbol jest używany wewnątrz trzeciego wspornika, [^…] Następnie zdefiniowany zestaw znaków wewnątrz wspornika zostanie pominięty w momencie wyszukiwania. Poniższe polecenie przeszuka każde słowo, które nie zaczyna się od 'F' Ale kończąc na 'ool'. Fajny I Bool zostaną wydrukowane zgodnie z danymi wzoru i tekstu.
$ printf "głupiec \ ncool \ ndoll \ nbool" | awk '/[^f] ool/'Wyjście:
Przejdź do treści
AWK Case Niesensensowna Regex
Domyślnie wyrażenie regularne wrażliwe na poszukiwanie wrażliwości podczas przeszukiwania dowolnego wzorca w ciągu. Wyszukiwanie niewrażliwych na sprawę można przeprowadzić przez polecenie AWK z wyrażeniem regularnym. W poniższym przykładzie, obniżyć() Funkcja służy do wykonywania nieczułych wyszukiwania. Tutaj pierwsze słowo każdego wiersza tekstu wejściowego zostanie przekonwertowane na niższy przypadek za pomocą obniżyć() Funkcja i dopasuj do wzoru wyrażenia regularnego. Toupper () W tym celu można również użyć funkcji, w tym przypadku wzór musi być zdefiniowany przez całą literę. Tekst zdefiniowany w poniższym przykładzie zawiera słowo wyszukiwania, 'sieć„W dwóch liniach, które zostaną wydrukowane jako wyjście.
$ echo -e "Projektowanie stron internetowych \ nWeb Development \ nframework" | Awk 'Tolower (0 USD) ~ /^Web /;'
Wyjście:
Przejdź do treści
AWK ze zmienną NF (liczba pól)
Nf jest wbudowaną zmienną polecenia AWK, która służy do zliczania całkowitej liczby pól w każdym wierszu tekstu wejściowego. Utwórz dowolny plik tekstowy z wieloma wierszami i wieloma słowami. Wejście.tekst Plik jest tutaj używany, który jest tworzony w poprzednim przykładzie.
Korzystanie z NF z wiersza poleceń
Tutaj pierwsze polecenie służy do wyświetlania zawartości wejście.tekst Plik i drugie polecenie służy do wyświetlania całkowitej liczby pól w każdym wierszu pliku za pomocą Nf zmienny.
Wejście $ CAT.tekstWyjście:
Utwórz plik AWK o nazwie liczyć.Awk ze skryptem podanym poniżej. Kiedy ten skrypt zostanie wykonany z dowolnymi danymi tekstowymi, każda zawartość linii z całkowitymi pól zostanie wydrukowana jako wyjście.
liczyć.Awk
Drukuj 0 $Uruchom skrypt przez następujące polecenie.
$ AWK -f Count.Wejście AWK.tekst
Wyjście:
Przejdź do treści
funkcja AWK gensub ()
getSub () jest funkcją podstawienia, która jest używana do wyszukiwania ciągów w oparciu o konkretne ograniczenie lub wzór wyrażenia regularnego. Ta funkcja jest zdefiniowana w 'gapić się' pakiet, który nie jest domyślnie zainstalowany. Składnia tej funkcji podano poniżej. Pierwszy parametr zawiera wzór wyrażenia regularnego lub ograniczenie wyszukiwania, drugi parametr zawiera tekst zastępczy, trzeci parametr wskazuje, w jaki sposób zostanie wykonane wyszukiwanie, a ostatni parametr zawiera tekst, w którym zastosowano tę funkcję.
Składnia:
Gensub (RegexP, zastępca, jak [, cel])
Uruchom następujące polecenie, aby zainstalować gapić się pakiet do używania getSub () Funkcja z poleceniem AWK.
$ sudo apt-get instaluj gawkUtwórz plik tekstowy o nazwie 'Salesinfo.tekst„z następującą treścią do ćwiczenia tego przykładu. Tutaj pola są oddzielone za pomocą zakładki.
Salesinfo.tekst
Mon 700000Uruchom następujące polecenie, aby odczytać pola numeryczne Salesinfo.tekst Złóż i wydrukuj sumę całej kwoty sprzedaży. Tutaj trzeci parametr „G” wskazuje na globalne wyszukiwanie. Oznacza to, że wzór zostanie przeszukany 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 ()
skraj() Funkcja służy do generowania dowolnej liczby losowej większej niż 0 i mniej niż 1. Zatem zawsze generuje liczbę ułamkową mniejszą niż 1. Poniższe polecenie wygeneruje ułamkowy liczba losowa i pomnoży wartość z 10, aby uzyskać liczbę więcej niż 1. Liczba ułamkowa z dwoma cyframi po wydrukowaniu punktu dziesiętnego do zastosowania funkcji printf (). Jeśli uruchomisz następujące polecenie wiele razy, otrzymasz inne wyjście za każdym razem.
$ awk 'start printf "numer to =%.2f \ n ", rand ()*10 '
Wyjście:
Przejdź do treści
Funkcja zdefiniowana przez użytkownika AWK
Wszystkie funkcje używane w poprzednich przykładach są wbudowanymi funkcjami. Ale możesz zadeklarować funkcję zdefiniowaną przez użytkownika w skrypcie AWK, aby wykonać dowolne konkretne zadanie. Załóżmy, że chcesz utworzyć niestandardową funkcję, aby obliczyć obszar prostokąta. Aby wykonać to zadanie, utwórz plik o nazwie 'obszar.Awk„Z następującym skryptem. W tym przykładzie nazwana definiowana przez użytkownika funkcja obszar() jest zadeklarowane w skrypcie, który oblicza obszar na podstawie parametrów wejściowych i zwraca wartość obszaru. Getline Polecenie jest używane tutaj do przyjmowania danych wejściowych od użytkownika.
obszar.Awk
# Oblicz obszarUruchom skrypt.
$ AWK -F Obszar.Awk
Wyjście:
Przejdź do treści
Awk Jeśli przykład
AWK obsługuje instrukcje warunkowe, takie jak inne standardowe języki programowania. Trzy rodzaje instrukcji IF pokazano w tej sekcji przy użyciu trzech przykładów. Utwórz plik tekstowy o nazwie rzeczy.tekst z następującą treścią.
rzeczy.tekst
HDD Samsung 100 $Prosty, jeśli przykład:
śledzi polecenie, przeczyta treść rzeczy.tekst Plik i sprawdź 3r & D Wartość pola w każdej linii. Jeśli wartość jest pusta, wydrukuje komunikat o błędzie z numerem wiersza.
$ awk 'if ($ 3 == "") Drukuj „Pole ceny brakuje w linii„ nr ”.tekst
Wyjście:
Następujące polecenie wydrukuje cenę elementu, jeśli 3r & D pole istnieje w wierszu, w przeciwnym razie wydrukuje komunikat o błędzie.
$ awk 'if (3 $ == "") Drukuj „Brakuje pole ceny”Wyjście:
Kiedy następujące polecenie zostanie wykonane z terminala, wówczas wejdzie od użytkownika. Wartość wejściowa zostanie porównana z każdym warunkiem, aż warunek będzie prawdziwy. Jeśli jakikolwiek warunek stanie się prawdziwy, wydrukuje odpowiednią ocenę. Jeśli wartość wejściowa nie pasuje do żadnego warunku, to wydrukuje nieudana awaria.
$ awk 'start drukuj "wprowadź znak:"
Getline Mark < "-"
if (mark> = 90) wydrukuj „a+”
w przeciwnym razie if (mark> = 80) wydrukuj „a”
else if (mark> = 70) wydrukuj „b+”
w przeciwnym razie wydrukuj „upadek”
Wyjście:
Przejdź do treści
zmienne AWK
Deklaracja zmiennej AWK jest podobna do deklaracji zmiennej powłoki. Istnieje różnica w odczytaniu wartości zmiennej. Symbol „$” jest używany z nazwą zmienną dla zmiennej powłoki do odczytania wartości. Ale nie ma potrzeby używania „$” ze zmienną AWK do odczytania wartości.
Poniższe polecenie zadeklaruje zmienną wymienioną 'strona' a wartość ciągu jest przypisana do tej zmiennej. Wartość zmiennej jest drukowana w następnej instrukcji.
$ awk 'start site = "Linuxhint.com "; witryna drukująca ''
Wyjście:
Następujące polecenie przeszuka słowo 'Drukarka' w pliku rzeczy.tekst. Jeśli jakaś linia pliku zaczyna się od 'Drukarka„Następnie będzie przechowywać wartość 1St, 2Nd I 3r & D pola w trzy zmienne. nazwa I cena Zmienne zostaną wydrukowane.
$ awk '/ drukarka/ name = 1 $; marka = 2 $; cena = 3 $; print "item name =" name;Wyjście:
Przejdź do treści
tablice AWK
Zarówno tablice numeryczne, jak i powiązane mogą być używane w AWK. Deklaracja zmiennej tablicy w AWK jest taka sama w przypadku innych języków programowania. W tej sekcji pokazano niektóre zastosowania tablic.
Indeks tablicy będzie dowolnym ciągiem dla tablicy asocjacyjnej. W tym przykładzie deklarowana i drukowana jest szereg trzech elementów.
$ awk 'start
Książki [„Projekt strony internetowej”] = „Uczenie się HTML 5”;
Książki [„Programowanie internetowe”] = "PHP i MySQL"
Książki [„PHP Framework”] = „Uczenie się Laravel 5”
printf "%s \ n%s \ n%s \ n", książki [„projekt internetowy”], książki [„Programowanie internetowe”],
Książki [„PHP Framework”] '
Wyjście:
Numeryczna tablica trzech elementów jest zadeklarowana i wydrukowana przez karta rozdzielająca.
$ awk 'startWyjście:
Przejdź do treści
Awk Loop
AWK obsługiwane są trzy rodzaje pętli. Zastosowania tych pętli pokazano tutaj, używając trzech przykładów.
Podczas gdy pętla używana w następującym poleceniu będzie iterowana przez 5 razy i wyjdzie z instrukcji pętli dla przerwy.
$ awk 'start n = 1; podczas gdy (n 5) przerwa; wydrukować n; n ++ '
Wyjście:
W przypadku pętli, która jest używana w następującym poleceniu AWK, obliczy sumę od 1 do 10 i wydrukuje wartość.
$ awk 'start sum = 0; dla (n = 1; n <= 10; n++) sum=sum+n; print sum '
Wyjście:
Pętla do zrobienia następującego polecenia wydrukuje wszystkie liczby równe od 10 do 5.
$ awk 'start Counter = 10; do if (Counter%2 == 0) Drukuj licznik; lada--
while (licznik> 5) '
Wyjście:
Przejdź do treści
AWK, aby wydrukować pierwszą kolumnę
Pierwszą kolumnę dowolnego pliku można wydrukować za pomocą zmiennej 1 USD w AWK. Ale jeśli wartość pierwszej kolumny zawiera wiele słów, to tylko pierwsze słowo pierwszej kolumny drukuje. Korzystając z określonego ogranicznika, pierwszą kolumnę można poprawnie wydrukować. Utwórz plik tekstowy o nazwie studenci.tekst z następującą treścią. Tutaj pierwsza kolumna zawiera tekst dwóch słów.
Studenci.tekst
Kaniz Fatema 30th seriaUruchom polecenie AWK bez żadnego ograniczenia. Pierwsza część pierwszej kolumny zostanie wydrukowana.
$ AWK 'drukuj 1 $ studenci.tekst
Uruchom polecenie AWK z następującym ogranicznikiem. Pełna część pierwszej kolumny zostanie wydrukowana.
$ awk -f '\\ s \\ s' 'drukuj 1 $' studenci.tekst
Wyjście:
Przejdź do treści
AWK, aby wydrukować ostatnią kolumnę
$ (Nf) Zmienną można użyć do wydrukowania ostatniej kolumny dowolnego pliku. Następujące polecenia AWK wydrukują ostatnią część i pełną część ostatniej kolumny uczniowie.tekst plik.
$ awk 'print $ (nf)' studenci.tekst
$ awk -f '\\ s \\ s' 'print $ (nf)' studenci.tekst
Wyjście:
Przejdź do treści
Awk z Grep
GREP to kolejna przydatna polecenie Linuksa do wyszukiwania treści w pliku opartym na dowolnym wyrażeniu regularnym. To, w jaki sposób można użyć zarówno poleceń AWK, jak i GREP, jest pokazane w poniższym przykładzie. Grep Polecenie służy do wyszukiwania informacji o identyfikatorze pracownika ”1002' z Pracownik.tekst plik. Wyjście polecenia GREP zostanie wysłane do AWK jako dane wejściowe. 5% premii będzie policzona i wydrukowana na podstawie wynagrodzenia identyfikatora pracownika ”1002 ' przez polecenie AWK.
$ CAT pracownik.tekst
$ grep „1002” pracownik.txt | awk -f '\ t' 'print $ 2 "dostanie $" (3 $*5)/100 "bonus"'
Wyjście:
Przejdź do treści
AWK z plikiem Bash
Podobnie jak inne polecenie Linux, polecenie AWK można również użyć w skrypcie Bash. Utwórz plik tekstowy o nazwie klienci.tekst z następującą treścią. Każda wiersz tego pliku zawiera informacje o czterech polach. To są identyfikator, nazwa, adres i numer telefonu komórkowego Klienta. Są one oddzielone przez '/'.
klienci.tekst
AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942Utwórz plik bash o nazwie item_search.grzmotnąć z następującym skryptem. Zgodnie z tym skryptem wartość stanu zostanie pobrana od użytkownika i przeszukana klienci.tekst plik przez Grep polecenie i przekazanie do polecenia AWK jako wejście. Polecenie AWK przeczyta 2Nd I 4th Pola każdej linii. Jeśli wartość wejściowa pasuje do dowolnej wartości stanu klienci.tekst plik, a następnie wydrukuje klienta nazwa I numer telefonu komórkowego, W przeciwnym razie wydrukuje wiadomość „Nie znaleziono klienta".
#!/bin/bash
echo „Wprowadź nazwę stanu:”
Przeczytaj stan
klienci = „Grep„ $ State ”klienci.txt | awk -f "/" 'drukuj „Nazwa klienta:„ 2 $ ”,
No mobilne: „4 $”
Jeśli [„$ klienci” != ""]; Następnie
echo $ klientów
w przeciwnym razie
echo „brak klienta”
fi
Uruchom następujące polecenia, aby pokazać wyjścia.
Klienci $ CAT.tekst
$ bash item_search.grzmotnąć
Wyjście:
Przejdź do treści
Awk z sed
Kolejnym przydatnym narzędziem wyszukiwania Linux jest sed. To polecenie może być używane zarówno do wyszukiwania, jak i zastępowania tekstu dowolnego pliku. Poniższy przykład pokazuje użycie polecenia AWK z sed Komenda. Tutaj polecenie SED przeszukuje wszystkie nazwy pracowników zaczyna się od 'J„i przechodzi do polecenia AWK jako dane wejściowe. AWK wydrukuje pracownika nazwa I ID Po sformatowaniu.
$ CAT pracownik.tekst
$ sed -n '/j/p pracownik.txt | awk -f '\ t' 'printf "%s (%s) \ n", 2 $, 1 $'
Wyjście:
Przejdź do treści
Możesz użyć polecenia AWK, aby tworzyć różne typy raportów na podstawie dowolnych danych tabelarycznych lub ograniczonych po prawidłowym filtrowaniu danych. Mam nadzieję, że będziesz mógł dowiedzieć się, jak działa polecenie AWK po ćwiczeniu przykładów pokazanych w tym samouczku.