Awk je výkonný jazyk pro manipulaci a zpracování textových souborů. To je zvláště užitečné, když jsou řádky v textových souborech ve formátu záznamu. tj. záznam obsahující více polí oddělených oddělovačem. I když vstupní soubor není ve formátu záznamu, stále můžete pomocí awk provést základní zpracování souborů a dat. Pomocí awk můžete také psát programovací logiku, i když neexistují žádné vstupní soubory, které je třeba zpracovat.
Stručně řečeno, AWK je výkonný jazyk, který se může hodit při provádění každodenních rutinních úloh.
Pokud s awk začínáte, začněte přečtením tohoto úvodního výukového programu Awk, který je součástí série výukových programů Awk.
Křivka učení na AWK je mnohem menší než křivka učení na jiných jazycích. Pokud již znáte program C, oceníte, jak jednoduché a snadné je naučit se AWK.
AWK původně napsali tři vývojáři — A. Aho, B. W. Kernighan a P. Weinberger. Takže název AWK pochází z iniciál těchto tří vývojářů.
Níže jsou uvedeny tři varianty AWK:
1. Awk
AWK je původní AWK, který napsali A. Aho, B. W. Kernighan a P. Weinberger.
2. Nawk
NAWK znamená „New AWK“. Toto je verze Awk od AT&T.
3. Gawk
GAWK znamená „GNU AWK“. Všechny distribuce Linuxu jsou dodávány s GAWK. Toto je plně kompatibilní s AWK a NAWK.
V Linuxu zadání buď awk nebo gawk vyvolá GAWK. awk je propojen s gawk, jak je uvedeno níže v systémech Linux.
# ls -l /bin/awk /usr/bin/awk lrwxrwxrwx 1 root root 4 Jan 5 23:13 /bin/awk -> gawk lrwxrwxrwx 1 root root 14 Jan 5 23:13 /usr/bin/awk -> ../../bin/gawk
Následující tabulka shrnuje různé funkce, které jsou v těchto verzích k dispozici. Jak vidíte níže, gawk je nadmnožina, která obsahuje všechny funkce původního awk a nawk.
Awk vs. Nawk vs Gawk
Stáhněte si rozdíly Awk vs Nawk vs Gawk ve formátu cheatsheet PDF.
Následující základní vestavěné proměnné FS, OFS, RS, ORS, NR, NF a FILENAME jsou dostupné ve všech verzích awk.
Funkce | Popis | AWK | NAWK | GAWK |
---|---|---|---|---|
FS | Oddělovač vstupních polí | Ano | Ano | Ano |
OFS | Oddělovač výstupních polí | Ano | Ano | Ano |
RS | Oddělovač záznamů | Ano | Ano | Ano |
ORS | Výstupní oddělovač záznamů | Ano | Ano | Ano |
NR | Číslo záznamu | Ano | Ano | Ano |
NF | Počet polí v záznamu | Ano | Ano | Ano |
NÁZEV SOUBORU | Obsahuje aktuální vstupní soubor, který se zpracovává | Ano | Ano | Ano |
Všechny následující funkce nejsou v původním awk dostupné. Jsou k dispozici v nawk a/nebo gawk, jak je uvedeno níže.
Funkce | Popis | NAWK | GAWK |
---|---|---|---|
FNR | Soubor „Číslo záznamu“ | Ano | Ano |
ARGC | Celkový počet nebo argumenty předané skriptu awk | Ano | Ano |
ARGV | Pole obsahující všechny argumenty skriptu awk | Ano | Ano |
ARGIND | Indexovat na ARGV pro načtení aktuálního názvu souboru | Ano | |
SUBSEP | Oddělovač dolního indexu pro indexy pole | Ano | Ano |
RSTART | Funkce Match nastaví RSTART s počátečním umístěním str1 v str2 | Ano | Ano |
DÉLKA DÉLKY | Funkce Match nastaví RLENGTH s délkou str1 | Ano | Ano |
OFMT | Awk to používá k rozhodnutí, jak vytisknout hodnoty. Výchozí hodnota je „%.6g“ | Ano | Ano |
ENVIRON | Pole obsahující všechny proměnné prostředí a hodnoty | Ano | |
IGNORECASE | Výchozí je 0. Při nastavení na 1 se nerozlišují malá a velká písmena pro porovnání řetězců a reg-ex. | Ano | |
ERRNO | Obsahuje chybovou zprávu I/O operace. např. při používání funkce getline. | Ano | |
BINMODE n | Nastavit binární režim pro I/O. n může být 1 (vstupní soubory), 2 (výstupní soubory) nebo 3 (všechny soubory) | Ano | |
CONVFMT | Formát použitý při převodu čísla na řetězec. | Ano | |
ŠÍŘKA POLE n | n je číslo oddělené mezerou, které udává šířku sloupce. Pokud je k dispozici, gawk použije toto místo FS. | Ano | |
LINT n | n může být číslo. Když n je nenulové číslo (označující true), gawk zobrazí fatální, neplatné nebo varovné zprávy lint (stejné jako příkazový řádek –lint) | Ano | |
TEXTDOMAIN | Toto se používá pro internacionalizaci. | Ano | |
sub(str1,str2,var) | Ve vstupním řetězci (var) je str1 nahrazeno str2 a výstup je uložen zpět ve var | Ano | Ano |
gsub(str1,str2,var) | Stejné jako sub, ale globální. Provádí více substitucí na stejném vstupním řetězci (var). | Ano | Ano |
match(str1,str2) | Vrátí kladné číslo, když je v str2 přítomen str1. | Ano | Ano |
getline Přečtěte si další řádek z jiného vstupního souboru. Nastaví $0, NF | Ano | Ano | |
getline var Přečtěte si další řádek z jiného vstupního souboru a uložte jej do proměnné (var) | Ano | Ano | |
toupper(str) | Převede str na velká písmena | Ano | |
tolower(str) | Převede str na malá písmena | Ano | |
|& | Obousměrná komunikace mezi příkazem awk a externím procesem | Ano | |
systime() | Aktuální čas v čase epochy. Kombinujte se strftime. např. print strftime(“%c”,systime()) | Ano |