Dowiedz się, jak używać specjalnych wzorów AWK „Zacznij i koniec” - część 9
- 711
- 53
- Pan Jeremiasz Więcek
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
.
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:
- Rozpocznij wzór: oznacza, że AWK wykona akcje określone w ZACZYNAĆ Raz przed odczytaniem jakichkolwiek linii wejściowych.
- 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:
- Kiedy
ZACZYNAĆ
Wzór jest używany w skrypcie, wszystkie działania ZACZYNAĆ są wykonywane raz przed odczytaniem jakiegokolwiek linii wejściowej. - Następnie odczytywana jest linia wejściowa i analizowana na różne pola.
- 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.
- Następnie stadium 2 i 3 są powtarzane dla wszystkich linii wejściowych.
- 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.tekstWyś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 0AWK 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.tekstSkrypt 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.
- « Jak pracować z grupami pakietów DNF
- Jak używać polecenia „Znajdź” do wyszukiwania wielu nazw plików (rozszerzenia) w Linux »