Dowiedz się, jak używać zmiennych wbudowanych Awk — część 10
Odkrywając sekcję dotyczącą funkcji Awk, w tej części serii omówimy koncepcję zmiennych wbudowanych w Awk. Istnieją dwa typy zmiennych, których możesz używać w Awk: zmienne zdefiniowane przez użytkownika, które omówiliśmy w części 8, oraz zmienne wbudowane.
Zmienne wbudowane mają wartości zdefiniowane już w Awk, ale możemy też ostrożnie zmieniać te wartości. Zmienne wbudowane obejmują:
FILENAME
: bieżąca nazwa pliku wejściowego (nie zmieniaj nazwy zmiennej)FR
: numer aktualnej linii wejściowej (czyli linii wejściowej 1, 2, 3… itd., nie zmieniaj nazwy zmiennej)NF
: liczba pól w bieżącej linii wprowadzania (nie zmieniaj nazwy zmiennej)OFS
: separator pola wyjściowegoFS
: separator pola wejściowegoORS
: separator rekordów wyjściowychRS
: separator rekordów wejściowych
Przejdźmy do zilustrowania użycia niektórych wbudowanych zmiennych Awk powyżej:
Aby odczytać nazwę bieżącego pliku wejściowego, możesz użyć wbudowanej zmiennej FILENAME
w następujący sposób:
awk ' { print FILENAME } ' ~/domains.txt
Zrozumiesz, że nazwa pliku jest drukowana dla każdej linii wejściowej, co jest domyślnym zachowaniem Awk, gdy używasz wbudowanej zmiennej FILENAME
.
Używając NR
do zliczenia liczby linii (rekordów) w pliku wejściowym, pamiętaj, że zlicza również puste linie, jak zobaczymy w przykładzie poniżej.
Kiedy przeglądamy plik domains.txt za pomocą polecenia cat, zawiera on 14 linii z tekstem i puste 2 linie:
cat ~/domains.txt
awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt
Aby policzyć liczbę pól w rekordzie lub wierszu, używamy wbudowanej zmiennej NR w następujący sposób:
cat ~/names.txt
awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt
Następnie możesz także określić separator pola wejściowego za pomocą wbudowanej zmiennej FS
, która definiuje sposób, w jaki Awk dzieli linie wejściowe na pola.
Domyślna wartość FS
to spacja i tabulacja, ale możemy zmienić wartość FS
na dowolny znak, który poinstruuje Awk, aby odpowiednio podzielił linie wejściowe.
Można to zrobić na dwa sposoby:
- jedną z metod jest użycie wbudowanej zmiennej FS
- a drugim jest wywołanie opcji -F Awk
Rozważmy plik /etc/passwd w systemie Linux. Pola w tym pliku są podzielone przy użyciu znaku :
, dzięki czemu możemy określić go jako nowy separator pola wejściowego, gdy chcemy odfiltrować określone pola, jak w poniższych przykładach:
Opcji -F
możemy użyć w następujący sposób:
awk -F':' '{ print $1, $4 ;}' /etc/passwd
Opcjonalnie możemy również skorzystać z wbudowanej zmiennej FS
, jak poniżej:
awk ' BEGIN { FS=“:” ; } { print $1, $4 ; } ' /etc/passwd
Aby określić separator pól wyjściowych, użyj wbudowanej zmiennej OFS
, która definiuje sposób rozdzielania pól wyjściowych za pomocą znaku, którego używamy, jak w poniższym przykładzie:
awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd
W tej Części 10 zbadaliśmy pomysł użycia wbudowanych zmiennych Awk, które mają predefiniowane wartości. Ale możemy również zmienić te wartości, chociaż nie jest to zalecane, jeśli nie wiesz, co robisz i masz odpowiednie zrozumienie.
Następnie przejdziemy do omówienia sposobu wykorzystania zmiennych powłoki w operacjach poleceń Awk, dlatego pozostań w kontakcie z Tecmint.