5.0 Opanowywanie wbudowanych zmiennych AWK
5.1. Rola zmiennych wbudowanych
Zmienne wbudowane są kluczową cechą AWK, zapewniającą automatyczny dostęp do informacji o danych wejściowych, środowisku wykonawczym i stanie programu. Opanowanie ich obsługi jest niezbędne do pisania wydajnych, zwięzłych i idiomatycznych skryptów AWK.
5.2. Standardowe zmienne AWK
- ARGC i ARGV ARGC zawiera liczbę argumentów wiersza poleceń, natomiast ARGV to tablica zawierająca same argumenty. Należy pamiętać, że ARGV[0] zawiera nazwę polecenia, awk.
- NF (Liczba pól) Ta zmienna przechowuje całkowitą liczbę pól w bieżącym rekordzie. Jest ona przeliczana przy każdym odczycie rekordu.
- NR (Numer rekordu) Ta zmienna działa jak licznik globalny, przechowując skumulowaną liczbę rekordów przetworzonych od momentu uruchomienia skryptu.
- FNR (Numer pliku rekordu) Podobnie jak NR, FNR przechowuje numer rekordu, ale jest resetowany do 1 dla każdego nowego pliku wejściowego. Dzięki temu jest nieoceniony w przypadku operacji na wielu plikach. Aby to zilustrować, rozważmy dwa pliki: data1.txt zawierający A\nB i data2.txt zawierający C\nD.
- Należy zauważyć, że wartość FNR dla pliku data2.txt resetuje się do 1, podczas gdy wartość NR nadal rośnie.
- FS (Separator pól) Definiuje znak lub wyrażenie regularne używane do oddzielania pól w rekordzie wejściowym. Domyślnie jest to spacja (jedna lub więcej spacji lub tabulatorów).
- RS (Separator rekordów) Definiuje znak używany do oddzielania rekordów w danych wejściowych. Domyślnie jest to znak nowej linii (\n).
- OFS (Separator pola wyjściowego) Definiuje separator umieszczany między polami w danych wyjściowych podczas używania polecenia print z wieloma argumentami. Domyślnie jest to pojedyncza spacja.
- ORS (Separator rekordów wyjściowych) Definiuje separator umieszczany na końcu każdego rekordu w danych wyjściowych. Domyślnie jest to znak nowej linii (\n).
- NAZWA PLIKU Ta zmienna przechowuje nazwę aktualnie przetwarzanego pliku wejściowego.
- **$0 i n** Jak wspomniano wcześniej, `0 reprezentuje cały bieżący rekord, natomiast n` (np. `1, $2`) reprezentuje n-te pole w tym rekordzie.
- PONOWNE URUCHOMIENIE I DŁUGOŚĆ Używane z funkcją match(). Po pomyślnym dopasowaniu, RSTART przechowuje pozycję początkową (indeks) dopasowanego podciągu, a RLENGTH przechowuje jego długość.
- CONVFMT i OFMT Te zmienne kontrolują format konwersji liczb na ciągi znaków (CONVFMT) oraz format wyjściowy liczb drukowanych przez funkcję print (OFMT). Domyślna wartość dla obu to %.6g.
- PODSEP Ta zmienna określa separator indeksu dolnego używany do symulacji tablic wielowymiarowych. Domyślnie jest to znak niedrukowalny \034.
- OTACZAĆ Tablica asocjacyjna zapewniająca dostęp do zmiennych środowiskowych powłoki.
5.3. Zmienne specyficzne dla GNU AWK (GAWK)
GAWK udostępnia szereg rozszerzeń standardu POSIX za pomocą własnego zestawu wbudowanych zmiennych.
- ARGIND:Indeks w tablicy ARGV wskazujący na aktualnie przetwarzany plik.
- IGNORUJ PRZYPADEK: Jeśli ustawione na wartość różną od zera, włącza dopasowywanie wzorców bez uwzględniania wielkości liter dla wszystkich operacji wyrażeń regularnych.
- BŁĄD: Gdy przekierowanie lub operacja close() się nie powiedzie, ta zmienna zawiera zależny od systemu ciąg komunikatu o błędzie.
- SZEROKOŚĆ POLA:Lista liczb rozdzielonych spacjami, która instruuje GAWK, aby analizował rekordy na podstawie stałych szerokości pól zamiast używać zmiennej FS.
- SZARPIE: Zapewnia dynamiczną kontrolę nad lintingiem. Ustawienie tego parametru umożliwia generowanie ostrzeżeń o nienośnych lub wątpliwych konstrukcjach kodu.
- PROCINFO: Tablica asocjacyjna zawierająca informacje o uruchomionym procesie, takie jak jego identyfikator procesu (PROCINFO[“pid”]).
- DOMENA TEKSTU:Służy do internacjonalizacji, określania domeny tekstowej w celu pobrania zlokalizowanych ciągów programowych.
- TRYB BIN: Używane w systemach nie-POSIX do określenia trybu binarnego dla operacji wejścia/wyjścia plików.
Teraz, gdy rozumiemy, jak AWK przechowuje i udostępnia dane za pośrednictwem zmiennych, następnym logicznym krokiem jest przyjrzenie się operatorom używanym do manipulowania tymi danymi.