Awk è un potente linguaggio per manipolare ed elaborare file di testo. È particolarmente utile quando le righe in un file di testo sono in un formato record. cioè un record contenente più campi separati da un delimitatore. Anche quando il file di input non è in un formato record, puoi comunque utilizzare awk per eseguire alcuni file di base e l'elaborazione dei dati. Puoi anche scrivere la logica di programmazione usando awk anche quando non ci sono file di input che devono essere elaborati.
In breve, AWK è un linguaggio potente, che può tornare utile per svolgere lavori di routine quotidiani.
Se non conosci awk, inizia leggendo questo tutorial introduttivo di Awk che fa parte della serie di tutorial di Awk.
La curva di apprendimento su AWK è molto più piccola della curva di apprendimento su qualsiasi altra lingua. Se conosci già il programma C, apprezzerai quanto sia semplice e facile imparare l'AWK.
AWK è stato originariamente scritto da tre sviluppatori:A. Aho, B. W. Kernighan e P. Weinberger. Quindi, il nome AWK deriva dalle iniziali di quei tre sviluppatori.
Le seguenti sono le tre varianti di AWK:
1. Awk
AWK è l'originale AWK scritto da A. Aho, B. W. Kernighan e P. Weinberger.
2. Nawk
NAWK sta per "Nuovo AWK". Questa è la versione AT&T di Awk.
3. Gawk
GAWK sta per "GNU AWK". Tutte le distribuzioni Linux vengono fornite con GAWK. Questo è completamente compatibile con AWK e NAWK.
Su Linux, digitando awk o gawk si richiama il GAWK. awk è collegato a gawk come mostrato di seguito sui sistemi 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
La tabella seguente riassume le diverse funzionalità disponibili in queste versioni. Come puoi vedere di seguito, gawk è il superset che contiene tutte le funzionalità di awk e nawk originali.
Awk contro Nawk contro Gawk
Scarica le differenze Awk Vs Nawk Vs Gawk in formato PDF cheatsheet.
Le seguenti variabili integrate di base FS, OFS, RS, ORS, NR, NF e FILENAME sono disponibili in tutte le versioni di awk.
Caratteristica | Descrizione | AWK | NAWK | GAWK |
---|---|---|---|---|
FS | Separatore campo di immissione | Sì | Sì | Sì |
OFS | Separatore campo di output | Sì | Sì | Sì |
RS | Separatore di record | Sì | Sì | Sì |
ORS | Separatore record di output | Sì | Sì | Sì |
NR | Numero del record | Sì | Sì | Sì |
NF | Numero di campi in un record | Sì | Sì | Sì |
NOME FILE | Contiene il file di input corrente che viene elaborato | Sì | Sì | Sì |
Tutte le seguenti funzionalità non sono disponibili nell'awk originale. Sono disponibili in nawk e/o gawk come mostrato di seguito.
Caratteristica | Descrizione | NAWK | GAWK |
---|---|---|---|
FNR | File “Numero del record” | Sì | Sì |
ARGC | Numero totale o argomenti passati allo script awk | Sì | Sì |
ARGV | Array contenente tutti gli argomenti dello script awk | Sì | Sì |
ARGENDO | Indice ad ARGV per recuperare il nome del file corrente | Sì | |
SUBSEP | Separatore di indici per gli indici di array | Sì | Sì |
RSTART | La funzione Match imposta RSTART con la posizione iniziale di str1 in str2 | Sì | Sì |
LUNGHEZZA | La funzione Match imposta RLENGTH con la lunghezza di str1 | Sì | Sì |
OFMT | Awk lo usa per decidere come stampare i valori. L'impostazione predefinita è "%.6g" | Sì | Sì |
AMBIENTE | Array contenente tutte le variabili ei valori di ambiente | Sì | |
IGNORECCA | Il valore predefinito è 0. Se impostato su 1, non fa distinzione tra maiuscole e minuscole per i confronti tra stringhe e reg-ex. | Sì | |
ERRNO | Contiene il messaggio di errore di un'operazione di I/O. per esempio. durante l'utilizzo della funzione getline. | Sì | |
BINMODE n | Imposta la modalità binaria per I/O. n può essere 1 (file di input), 2 (file di output) o 3 (tutti i file) | Sì | |
CONVFMT | Il formato utilizzato durante la conversione da numero a stringa. | Sì | |
LARGHEZZA CAMPO n | n è un numero delimitato da spazi che indica le larghezze delle colonne. Se è disponibile, gawk lo usa invece di FS. | Sì | |
LINT n | n può essere un numero. Quando n è un numero diverso da zero (che indica vero), gawk visualizzerà messaggi di lint fatali, non validi o di avviso (come da riga di comando –lint) | Sì | |
TEXTDOMAIN | Questo è usato per l'internazionalizzazione. | Sì | |
sub(str1,str2,var) | Nella stringa di input (var), str1 viene sostituito con str2 e l'output viene archiviato nuovamente in var | Sì | Sì |
gsub(str1,str2,var) | Come sub, ma globale. Esegue più sostituzioni sulla stessa stringa di input (var). | Sì | Sì |
corrispondenza(str1,str2) | Restituisce un numero positivo quando str1 è presente in str2. | Sì | Sì |
getline Legge la riga successiva da un altro file di input. Imposta $0, NF | Sì | Sì | |
getline var Legge la riga successiva da un altro file di input e salvalo nella variabile (var) | Sì | Sì | |
topper(str) | Converte str in maiuscolo | Sì | |
tollower(str) | Converte str in minuscolo | Sì | |
|& | Comunicazione bidirezionale tra comando awk e processo esterno | Sì | |
systime() | Ora attuale nell'epoca. Combina con strftime. per esempio. print strftime(“%c”,systime()) | Sì |