Dowiedz się, jak używać specjalnych wzorów AWK „Zacznij i koniec” - część 9

Dowiedz się, jak używać specjalnych wzorów AWK „Zacznij i koniec” - część 9

W Część 8 Z tej serii AWK wprowadziliśmy kilka potężnych funkcji poleceń AWK, czyli zmiennych, wyrażeń numerycznych i operatorów przypisań.

W miarę postępów w tym segmencie omówimy więcej Awk funkcje i to są specjalne wzory: ZACZYNAĆ I KONIEC.

Naucz się wzorców AWK, rozpoczyna się i kończą

Te specjalne funkcje okażą się pomocne, gdy próbujemy rozwijać i zbadać więcej metod kompleksu budowania Awk Operacje.

Aby zacząć, odrzućmy nasze myśli z powrotem do wprowadzenia Awk Seria, pamiętaj, kiedy zaczęliśmy tę serię, wskazałem, że ogólna składnia działającego Awk Polecenie to:

# AWK „Script” Filenames 

I w powyższej składni, Awk Skrypt ma formularz:

/ wzór/ Actions 

Jeśli weźmiesz pod uwagę wzór w skrypcie, zwykle jest to wyrażenie regularne, dodatkowo możesz również myśleć o wzorcu jako wzorach specjalnych ZACZYNAĆ I KONIEC. Dlatego możemy również napisać Awk polecenie w poniższym formularzu:

awk 'start Actions / wzór / Actions / wzór / Actions… . END Actions „nazwy plików 

W przypadku użycia specjalnych wzorów: ZACZYNAĆ I KONIEC w Awk Skrypt, to właśnie oznacza każdy z nich:

  1. Rozpocznij wzór: oznacza, że ​​AWK wykona akcje określone w ZACZYNAĆ Raz przed odczytaniem jakichkolwiek linii wejściowych.
  2. Wzór końcowy: oznacza, że ​​AWK wykona akcje określone w KONIEC Zanim faktycznie wyjdzie.

I przepływ wykonania Awk Skrypt poleceń, który zawiera te specjalne wzorce, jest następujący:

  1. Kiedy ZACZYNAĆ Wzór jest używany w skrypcie, wszystkie działania ZACZYNAĆ są wykonywane raz przed odczytaniem jakiegokolwiek linii wejściowej.
  2. Następnie odczytywana jest linia wejściowa i analizowana na różne pola.
  3. Następnie każdy z określonych niespecjalnych wzorców jest porównywana z linią wejściową dla dopasowania, po znalezie. Ten etap zostanie powtórzony dla wszystkich określonych wzorów.
  4. Następnie stadium 2 i 3 są powtarzane dla wszystkich linii wejściowych.
  5. Gdy wszystkie linie wejściowe zostaną odczytane i rozwiązane, na wypadek, gdybyś określał KONIEC wzór, akcje zostaną wykonane.

Zawsze powinieneś pamiętać tę sekwencję wykonania podczas pracy ze specjalnymi wzorami, aby osiągnąć najlepsze wyniki w Awk operacja.

Aby to wszystko zrozumieć, ilustrujmy przy użyciu przykładu z części 8, na temat listy domen należących do Tecmint, jako przechowywane w pliku o nazwie domeny.tekst.

Aktualności.Tecmint.com tecMint.com Linuxsay.Windows com.Tecmint.com tecMint.Com News.Tecmint.com tecMint.com Linuxsay.com tecMint.Com News.Tecmint.com tecMint.com Linuxsay.Windows com.Tecmint.com tecMint.com 
$ cat ~/domeny.tekst 
Wyświetl zawartość pliku

W tym przykładzie chcemy policzyć, ile razy domena Tecmint.com jest wymieniony w pliku domeny.tekst. Napisaliśmy więc mały skrypt powłoki, który pomoże nam to zrobić, używając idei zmiennych, wyrażeń numerycznych i operatorów przypisań, które mają następujące treści:

#!/bin/bash dla pliku w [e -mail chroniony]; zrób, jeśli [-f $ plik]; Następnie #Print Out FileName Echo „Plik to: $ plik” #Print Numer stopniowo dla każdej linii zawierającej TecMint.COM AWK '/^TECMINT.com/ Counter+= 1; printf "%s \ n", licznik;  '$ plik else #print Informacje o błędach, jeśli wejście nie jest echo pliku "."> I 2 && Exit 1 Fi wykonano #terminację skryptu z kodem wyjściowym 0 w przypadku pomyślnego wykonywania wyjścia 0 

Zastosujmy teraz dwa specjalne wzory: ZACZYNAĆ I KONIEC w Awk polecenie w skrypcie powyżej w następujący sposób:

Zmienimy skrypt:

awk '/^tecmint.com/ Counter+= 1; printf "%s \ n", licznik;  '$ plik 

Do:

awk ZACZYNAĆ wydrukuj „liczba razy Tecmint.Com pojawia się w pliku: "; /^Tecminint.com/ Counter+= 1;  KONIEC printf "%s \ n", licznik;  '$ plik 

Po wprowadzeniu zmian w Awk Polecenie, pełny skrypt powłoki wygląda teraz tak:

#!/bin/bash dla pliku w [e -mail chroniony]; zrób, jeśli [-f $ plik]; Następnie #Print Out FileName Echo „Plik to: $ plik” #print Całkowita liczba razy TecMint.com pojawia się w pliku AWK ' ZACZYNAĆ wydrukuj „liczba razy Tecmint.Com pojawia się w pliku: "; /^Tecminint.com/ Counter+= 1;  KONIEC printf "%s \ n", licznik;  '$ plik else #print Informacje o błędach, jeśli wejście nie jest echo pliku "."> I 2 && Exit 1 Fi wykonano #terminację skryptu z kodem wyjściowym 0 w przypadku pomyślnego wykonywania wyjścia 0 
AWK Wzory początkowe i końcowe

Po uruchomieniu skryptu powyżej, przede wszystkim wydrukuje lokalizację pliku domeny.tekst, a później Awk Skrypt poleceń jest wykonywany, gdzie ZACZYNAĆ Specjalny wzór pomaga nam wydrukować wiadomość ”Liczba razy Tecmint.Com pojawia się w pliku to:”Przed odczytaniem jakichkolwiek linii wejściowych z pliku.

Potem nasz wzór, /^Tecmint.com/ jest porównywany z każdą linią wejściową i akcją, Counter+= 1; jest wykonywany dla każdej linii wejściowej, co liczy liczbę razy Tecmint.com pojawia się w pliku.

Wreszcie KONIEC Wzór wydrukuje całkowitą liczbę czasów domeny Tecmint.com pojawia się w pliku.

$ ./scenariusz.sh ~/domeny.tekst 
Skrypt do liczenia liczby razy pojawia się ciąg

Podsumowując, przeszliśmy więcej Awk Funkcje badające koncepcje specjalnego wzoru: ZACZYNAĆ I KONIEC.

Jak wspomniałem wcześniej, te funkcje AWK pomogą nam zbudować bardziej złożone operacje filtrowania tekstu, jest więcej do omówienia Awk funkcje i in Część 10, Podejdziemy do idei wbudowanych zmiennych AWK, więc pozostań w kontakcie.