Wyszukiwanie w witrynie

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ą:

  1. FILENAME: bieżąca nazwa pliku wejściowego (nie zmieniaj nazwy zmiennej)
  2. FR : numer aktualnej linii wejściowej (czyli linii wejściowej 1, 2, 3… itd., nie zmieniaj nazwy zmiennej)
  3. NF : liczba pól w bieżącej linii wprowadzania (nie zmieniaj nazwy zmiennej)
  4. OFS: separator pola wyjściowego
  5. FS: separator pola wejściowego
  6. ORS: separator rekordów wyjściowych
  7. RS: 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:

  1. jedną z metod jest użycie wbudowanej zmiennej FS
  2. 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.