AWK - Guida rapida
AWK è un linguaggio di programmazione interpretato. È molto potente e progettato appositamente per l'elaborazione del testo. Il suo nome deriva dai cognomi dei suoi autori -Alfred Aho, Peter Weinberger, and Brian Kernighan.
La versione di AWK che GNU / Linux distribuisce è scritta e mantenuta dalla Free Software Foundation (FSF); è spesso indicato comeGNU AWK.
Tipi di AWK
Di seguito sono riportate le varianti di AWK:
AWK - AWK originale del laboratorio AT & T.
NAWK - Versione più recente e migliorata di AWK da AT & T Laboratory.
GAWK- È GNU AWK. Tutte le distribuzioni GNU / Linux includono GAWK. È completamente compatibile con AWK e NAWK.
Usi tipici di AWK
È possibile eseguire una miriade di attività con AWK. Di seguito sono elencati solo alcuni di loro:
- Elaborazione del testo,
- Produzione di rapporti di testo formattati,
- Esecuzione di operazioni aritmetiche,
- Esecuzione di operazioni sulle stringhe e molte altre.
Questo capitolo descrive come configurare l'ambiente AWK sul tuo sistema GNU / Linux.
Installazione tramite Package Manager
Generalmente, AWK è disponibile per impostazione predefinita sulla maggior parte delle distribuzioni GNU / Linux. Puoi usarewhichcomando per verificare se è presente sul tuo sistema o meno. Se non hai AWK, installalo su GNU / Linux basato su Debian usando Advance Package Tool(APT) gestore di pacchetti come segue -
[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk
Allo stesso modo, per installare AWK su GNU / Linux basato su RPM, utilizzare Yellowdog Updator Modifier yum gestore di pacchetti come segue -
[root]# yum install gawk
Dopo l'installazione, assicurati che AWK sia accessibile tramite riga di comando.
[jerry]$ which awk
Quando si esegue il codice sopra, si ottiene il seguente risultato:
/usr/bin/awk
Installazione dal codice sorgente
Poiché GNU AWK fa parte del progetto GNU, il suo codice sorgente è disponibile per il download gratuito. Abbiamo già visto come installare AWK utilizzando il gestore di pacchetti. Vediamo ora come installare AWK dal suo codice sorgente.
La seguente installazione è applicabile a qualsiasi software GNU / Linux e anche alla maggior parte degli altri programmi disponibili gratuitamente. Ecco i passaggi di installazione:
Step 1- Scarica il codice sorgente da un luogo autentico. L'utilità della riga di comandowget serve a questo scopo.
[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz
Step 2 - Decomprimere ed estrarre il codice sorgente scaricato.
[jerry]$ tar xvf gawk-4.1.1.tar.xz
Step 3 - Passa alla directory ed esegui configure.
[jerry]$ ./configure
Step 4 - In caso di completamento con successo, il file configuregenera Makefile. Per compilare il codice sorgente, rilascia un filemake comando.
[jerry]$ make
Step 5- Puoi eseguire la suite di test per assicurarti che la build sia pulita. Questo è un passaggio facoltativo.
[jerry]$ make check
Step 6- Infine, installa AWK. Assicurati di disporre dei privilegi di superutente.
[jerry]$ sudo make install
Questo è tutto! Hai compilato e installato correttamente AWK. Verificalo eseguendo il fileawk comando come segue -
[jerry]$ which awk
Eseguendo questo codice, ottieni il seguente risultato:
/usr/bin/awk
Per diventare un programmatore AWK esperto, devi conoscerne i componenti interni. AWK segue un semplice flusso di lavoro: lettura, esecuzione e ripetizione. Il diagramma seguente illustra il flusso di lavoro di AWK:
Leggere
AWK legge una riga dal flusso di input (file, pipe o stdin) e la archivia in memoria.
Eseguire
Tutti i comandi AWK vengono applicati in sequenza sull'input. Per impostazione predefinita, AWK esegue i comandi su ogni riga. Possiamo limitare questo fornendo modelli.
Ripetere
Questo processo si ripete finché il file non raggiunge la fine.
Struttura del programma
Vediamo ora di capire la struttura del programma di AWK.
BEGIN blocco
La sintassi del blocco BEGIN è la seguente:
Syntax
BEGIN {awk-commands}
Il blocco BEGIN viene eseguito all'avvio del programma. Viene eseguito solo una volta. Questo è un buon posto per inizializzare le variabili. BEGIN è una parola chiave AWK e quindi deve essere in lettere maiuscole. Tieni presente che questo blocco è facoltativo.
Blocco del corpo
La sintassi del blocco del corpo è la seguente:
Syntax
/pattern/ {awk-commands}
Il blocco del corpo applica i comandi AWK su ogni riga di input. Per impostazione predefinita, AWK esegue i comandi su ogni riga. Possiamo limitare questo fornendo modelli. Nota che non ci sono parole chiave per il blocco Body.
Blocco FINE
La sintassi del blocco END è la seguente:
Syntax
END {awk-commands}
Il blocco END viene eseguito alla fine del programma. END è una parola chiave AWK e quindi deve essere in lettere maiuscole. Tieni presente che questo blocco è facoltativo.
Creiamo un file marks.txt che contiene il numero di serie, il nome dello studente, il nome del soggetto e il numero di voti ottenuti.
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Vediamo ora di visualizzare il contenuto del file con l'intestazione utilizzando lo script AWK.
Example
[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
Quando questo codice viene eseguito, produce il seguente risultato:
Output
Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
All'inizio, AWK stampa l'intestazione dal blocco BEGIN. Quindi, nel blocco del corpo, legge una riga da un file ed esegue il comando di stampa di AWK che stampa semplicemente il contenuto sul flusso di output standard. Questo processo si ripete finché il file non raggiunge la fine.
AWK è semplice da usare. Possiamo fornire comandi AWK direttamente dalla riga di comando o sotto forma di file di testo contenente comandi AWK.
Riga di comando AWK
Possiamo specificare un comando AWK tra virgolette singole nella riga di comando come mostrato -
awk [options] file ...
Esempio
Considera un file di testo marks.txt con il seguente contenuto -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Cerchiamo di visualizzare il contenuto completo del file utilizzando AWK come segue:
Example
[jerry]$ awk '{print}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
File di programma AWK
Possiamo fornire comandi AWK in un file di script come mostrato -
awk [options] -f file ....
Innanzitutto, crea un file di testo command.awk contenente il comando AWK come mostrato di seguito -
{print}
Ora possiamo istruire l'AWK a leggere i comandi dal file di testo ed eseguire l'azione. Qui, otteniamo lo stesso risultato mostrato nell'esempio sopra.
Example
[jerry]$ awk -f command.awk marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Opzioni standard AWK
AWK supporta le seguenti opzioni standard che possono essere fornite dalla riga di comando.
L'opzione -v
Questa opzione assegna un valore a una variabile. Consente l'assegnazione prima dell'esecuzione del programma. Il seguente esempio descrive l'utilizzo dell'opzione -v.
Example
[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Name = Jerry
L'opzione --dump-variables [= file]
Stampa un elenco ordinato di variabili globali e dei loro valori finali su file. Il file predefinito èawkvars.out.
Example
[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Output
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"
L'opzione --help
Questa opzione stampa il messaggio di aiuto sullo standard output.
Example
[jerry]$ awk --help
Eseguendo questo codice, ottieni il seguente risultato:
Output
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options : GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
L'opzione --lint [= fatal]
Questa opzione consente il controllo di costrutti non portatili o dubbi. Quando un argomentofatalviene fornito, tratta i messaggi di avviso come errori. Il seguente esempio lo dimostra:
Example
[jerry]$ awk --lint '' /bin/ls
Eseguendo questo codice, ottieni il seguente risultato:
Output
awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!
L'opzione --posix
Questa opzione attiva la rigorosa compatibilità POSIX, in cui tutte le estensioni comuni e specifiche di gawk sono disabilitate.
L'opzione --profile [= file]
Questa opzione genera una versione abbastanza stampata del programma in file. Il file predefinito èawkprof.out. Di seguito un semplice esempio illustra questo:
Example
[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out
Eseguendo questo codice, ottieni il seguente risultato:
Output
# gawk profile, created Sun Oct 26 19:50:48 2014
# BEGIN block(s)
BEGIN {
printf "---|Header|--\n"
}
# Rule(s) {
print $0
}
# END block(s)
END {
printf "---|Footer|---\n"
}
L'opzione --traditional
Questa opzione disabilita tutte le estensioni specifiche di gawk.
L'opzione --version
Questa opzione visualizza le informazioni sulla versione del programma AWK.
Example
[jerry]$ awk --version
Quando questo codice viene eseguito, produce il seguente risultato:
Output
GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.
Questo capitolo descrive diversi utili comandi AWK e i relativi esempi. Considera un file di testomarks.txt da trattare con il seguente contenuto -
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Colonna o campo di stampa
È possibile indicare ad AWK di stampare solo alcune colonne dal campo di input. Il seguente esempio lo dimostra:
Esempio
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Physics 80
Maths 90
Biology 87
English 85
History 89
Nel file marks.txt, la terza colonna contiene il nome del soggetto e la quarta colonna contiene i voti ottenuti in un particolare argomento. Stampiamo queste due colonne usando il comando di stampa AWK. Nell'esempio sopra,$3 and $4 rappresentano rispettivamente il terzo e il quarto campo dal record di input.
Stampa di tutte le righe
Per impostazione predefinita, AWK stampa tutte le linee che corrispondono al modello.
Esempio
[jerry]$ awk '/a/ {print $0}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Nell'esempio sopra, stiamo cercando il modello di modulo a. Quando una corrispondenza di pattern ha esito positivo, esegue un comando dal blocco del corpo. In assenza di un blocco del corpo, viene eseguita l'azione predefinita che è stampare il record. Quindi, il seguente comando produce lo stesso risultato:
Esempio
[jerry]$ awk '/a/' marks.txt
Colonne di stampa per motivo
Quando una corrispondenza di pattern ha esito positivo, AWK stampa l'intero record per impostazione predefinita. Ma puoi istruire AWK a stampare solo determinati campi. Ad esempio, il seguente esempio stampa il terzo e il quarto campo quando una corrispondenza di pattern riesce.
Esempio
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Maths 90
Biology 87
English 85
History 89
Colonna di stampa in qualsiasi ordine
Puoi stampare le colonne in qualsiasi ordine. Ad esempio, il seguente esempio stampa la quarta colonna seguita dalla terza colonna.
Esempio
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Produzione
90 Maths
87 Biology
85 English
89 History
Conteggio e stampa di modelli abbinati
Vediamo un esempio in cui puoi contare e stampare il numero di righe per le quali una corrispondenza di pattern è riuscita.
Esempio
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Count = 4
In questo esempio, incrementiamo il valore di counter quando una corrispondenza di pattern ha successo e stampiamo questo valore nel blocco END. Notare che a differenza di altri linguaggi di programmazione, non è necessario dichiarare una variabile prima di utilizzarla.
Stampa di righe con più di 18 caratteri
Stampiamo solo quelle righe che contengono più di 18 caratteri.
Esempio
[jerry]$ awk 'length($0) > 18' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
3) Shyam Biology 87
4) Kedar English 85
AWK fornisce un file length funzione che restituisce la lunghezza della stringa. $0variabile memorizza l'intera riga e, in assenza di un blocco del corpo, viene eseguita l'azione predefinita, ovvero l'azione di stampa. Quindi, se una riga ha più di 18 caratteri, il confronto risulta vero e la riga viene stampata.
AWK fornisce diverse variabili integrate. Svolgono un ruolo importante durante la scrittura di script AWK. Questo capitolo mostra l'uso delle variabili incorporate.
Variabili AWK standard
Le variabili AWK standard sono discusse di seguito.
ARGC
Implica il numero di argomenti forniti dalla riga di comando.
Example
[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four
Eseguendo questo codice, ottieni il seguente risultato:
Output
Arguments = 5
Ma perché AWK mostra 5 quando hai passato solo 4 argomenti? Controlla il seguente esempio per cancellare il tuo dubbio.
ARGV
È un array che memorizza gli argomenti della riga di comando. L'indice valido dell'array varia da 0 a ARGC-1.
Example
[jerry]$ awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' one two three four
Eseguendo questo codice, ottieni il seguente risultato:
Output
ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three
CONVFMT
Rappresenta il formato di conversione per i numeri. Il suo valore predefinito è%.6g.
Example
[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Conversion Format = %.6g
AMBIENTE
È un array associativo di variabili d'ambiente.
Example
[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
jerry
Per trovare i nomi di altre variabili di ambiente, utilizzare env comando.
NOME DEL FILE
Rappresenta il nome del file corrente.
Example
[jerry]$ awk 'END {print FILENAME}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
marks.txt
Tieni presente che FILENAME non è definito nel blocco BEGIN.
FS
Rappresenta il separatore del campo (di input) e il suo valore predefinito è lo spazio. Puoi anche cambiarlo usando-F opzione della riga di comando.
Example
[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
FS = $
NF
Rappresenta il numero di campi nel record corrente. Ad esempio, il seguente esempio stampa solo quelle righe che contengono più di due campi.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'
Eseguendo questo codice, ottieni il seguente risultato:
Output
One Two Three
One Two Three Four
NR
Rappresenta il numero del record corrente. Ad esempio, il seguente esempio stampa il record se il numero di record corrente è inferiore a tre.
Example
[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'
Eseguendo questo codice, ottieni il seguente risultato:
Output
One Two
One Two Three
FNR
È simile a NR, ma relativo al file corrente. È utile quando AWK opera su più file. Il valore di FNR si ripristina con il nuovo file.
OFMT
Rappresenta il numero del formato di output e il suo valore predefinito è %.6g.
Example
[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
OFMT = %.6g
OFS
Rappresenta il separatore del campo di output e il suo valore predefinito è lo spazio.
Example
[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
OFS = $
ORS
Rappresenta il separatore del record di output e il suo valore predefinito è newline.
Example
[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Output
ORS = $
$
RLENGTH
Rappresenta la lunghezza della stringa di cui corrisponde matchfunzione. La funzione match di AWK cerca una data stringa nella stringa di input.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
2
RS
Rappresenta il separatore di record (input) e il suo valore predefinito è newline.
Example
[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
RS = $
$
RSTART
Rappresenta la prima posizione nella stringa abbinata da match funzione.
Example
[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
9
SUBSEP
Rappresenta il carattere separatore per gli indici dell'array e il suo valore predefinito è \034.
Example
[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
SUBSEP = ^\$
$ 0
Rappresenta l'intero record di input.
Example
[jerry]$ awk '{print $0}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
$ n
Rappresenta l' ennesimo campo nel record corrente in cui i campi sono separati da FS.
Example
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
Physics 80
Maths 90
Biology 87
English 85
History 89
Variabili specifiche di GNU AWK
Le variabili specifiche di GNU AWK sono le seguenti:
ARGIND
Rappresenta l'indice in ARGV del file corrente in elaborazione.
Example
[jerry]$ awk '{
print "ARGIND = ", ARGIND; print "Filename = ", ARGV[ARGIND]
}' junk1 junk2 junk3
Eseguendo questo codice, ottieni il seguente risultato:
Output
ARGIND = 1
Filename = junk1
ARGIND = 2
Filename = junk2
ARGIND = 3
Filename = junk3
BINMODE
Viene utilizzato per specificare la modalità binaria per tutti i file I / O su sistemi non POSIX. I valori numerici 1, 2 o 3 specificano che i file di input, i file di output o tutti i file, rispettivamente, devono utilizzare I / O binario. Valori stringa dir o wspecificare che i file di input o di output, rispettivamente, devono utilizzare I / O binario. Valori stringa dirw o wr specificare che tutti i file devono utilizzare I / O binario.
ERRNO
Una stringa indica un errore quando un reindirizzamento non riesce per getline o se close la chiamata fallisce.
Example
[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Error: No such file or directory
LARGHEZZE DI CAMPO
Viene impostato un elenco separato da spazi di variabili di larghezza di campo, GAWK analizza l'input in campi di larghezza fissa, invece di utilizzare il valore della variabile FS come separatore di campo.
IGNORARE
Quando questa variabile è impostata, GAWK non fa distinzione tra maiuscole e minuscole. Il seguente esempio lo dimostra:
Example
[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt
Eseguendo questo codice, ottieni il seguente risultato:
Output
1) Amit Physics 80
LINT
Fornisce il controllo dinamico di --lintopzione dal programma GAWK. Quando questa variabile è impostata, GAWK stampa gli avvisi di lanugine. Quando viene assegnato il valore di stringa irreversibile, gli avvisi di lanugine diventano errori irreversibili, esattamente come--lint=fatal.
Example
[jerry]$ awk 'BEGIN {LINT = 1; a}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect
PROCINFO
Si tratta di un array associativo contenente informazioni sul processo, come numeri UID reali ed effettivi, numero ID processo e così via.
Example
[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
4316
TEXTDOMAIN
Rappresenta il dominio di testo del programma AWK. Viene utilizzato per trovare le traduzioni localizzate per le stringhe del programma.
Example
[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
messages
L'output sopra mostra il testo in inglese a causa di en_IN locale
Come altri linguaggi di programmazione, AWK fornisce anche un ampio set di operatori. Questo capitolo spiega gli operatori AWK con esempi appropriati.
S.No. | Operatori e descrizione |
---|---|
1 | Operatori aritmetici AWK supporta i seguenti operatori aritmetici. |
2 | Operatori di incremento e decremento AWK supporta i seguenti operatori di incremento e decremento. |
3 | Operatori di assegnazione AWK supporta i seguenti operatori di assegnazione. |
4 | Operatori relazionali AWK supporta i seguenti operatori relazionali. |
5 | Operatori logici AWK supporta i seguenti operatori logici. |
6 | Operatore ternario Possiamo facilmente implementare un'espressione di condizione usando l'operatore ternario. |
7 | Operatori unari AWK supporta i seguenti operatori unari. |
8 | Operatori esponenziali Esistono due formati di operatori esponenziali. |
9 | Operatore di concatenazione di stringhe Lo spazio è un operatore di concatenazione di stringhe che unisce due stringhe. |
10 | Operatore di appartenenza all'array È rappresentato da in. Viene utilizzato durante l'accesso agli elementi dell'array. |
11 | Operatori di espressioni regolari Questo esempio spiega le due forme di operatori di espressioni regolari. |
AWK è molto potente ed efficiente nella gestione delle espressioni regolari. Numerose attività complesse possono essere risolte con semplici espressioni regolari. Qualsiasi esperto della riga di comando conosce la potenza delle espressioni regolari.
Questo capitolo tratta le espressioni regolari standard con esempi appropriati.
Punto
Corrisponde a qualsiasi carattere singolo tranne il carattere di fine riga. Ad esempio, il seguente esempio corrisponde afin, fun, fan eccetera.
Esempio
[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Produzione
fun
fin
fan
Inizio della linea
Corrisponde all'inizio della linea. Ad esempio, il seguente esempio stampa tutte le righe che iniziano con patternThe.
Esempio
[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
There
Their
Fine della riga
Corrisponde alla fine della riga. Ad esempio, il seguente esempio stampa le righe che terminano con la letteran.
Esempio
[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
Produzione
Eseguendo questo codice, ottieni il seguente risultato:
fun
fin
fan
Corrisponde al set di caratteri
Viene utilizzato per abbinare solo uno dei diversi caratteri. Ad esempio, il seguente esempio corrisponde a patternCall e Tall ma no Ball.
Esempio
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'
Produzione
Eseguendo questo codice, ottieni il seguente risultato:
Call
Tall
Set esclusivo
Nel set esclusivo, il carato nega il set di caratteri tra parentesi quadre. Ad esempio, viene stampato solo il seguente esempioBall.
Esempio
[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Ball
Alterazione
Una barra verticale consente di eseguire l'OR logico delle espressioni regolari. Ad esempio, viene stampato il seguente esempioBall e Call.
Esempio
[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Call
Ball
Zero o una ricorrenza
Corrisponde a zero o una occorrenza del carattere precedente. Ad esempio, il seguente esempio corrisponde aColour così come Color. Noi abbiamo fattou come carattere opzionale utilizzando ?.
Esempio
[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Colour
Color
Zero o più occorrenze
Corrisponde a zero o più occorrenze del carattere precedente. Ad esempio, il seguente esempio corrisponde aca, cat, catt, e così via.
Esempio
[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
ca
cat
catt
Una o più occorrenze
Corrisponde a una o più occorrenze del carattere precedente. Ad esempio, l'esempio seguente corrisponde a una o più occorrenze di2.
Esempio
[jerry]$ echo -e "111\n22\n123\n234\n456\n222" | awk '/2+/'
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Produzione
22
123
234
222
Raggruppamento
Parentheses ()sono usati per il raggruppamento e il carattere | è utilizzato per le alternative. Ad esempio, la seguente espressione regolare corrisponde alle righe che contengono entrambiApple Juice or Apple Cake.
Esempio
[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk
'/Apple (Juice|Cake)/'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Apple Juice
Apple Cake
AWK ha array associativi e una delle cose migliori è che gli indici non devono essere un insieme continuo di numeri; è possibile utilizzare stringa o numero come indice di matrice. Inoltre, non è necessario dichiarare in anticipo la dimensione di un array: gli array possono espandersi / ridursi in fase di esecuzione.
La sua sintassi è la seguente:
Sintassi
array_name[index] = value
Dove array_name è il nome dell'array, index è l'indice dell'array e value è un qualsiasi valore assegnato all'elemento dell'array.
Creazione di array
Per ottenere maggiori informazioni sull'array, creiamo e accediamo agli elementi di un array.
Esempio
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange"
print fruits["orange"] "\n" fruits["mango"]
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
orange
yellow
Nell'esempio sopra, dichiariamo l'array come fruitsil cui indice è il nome del frutto e il valore è il colore del frutto. Per accedere agli elementi dell'array, usiamoarray_name[index] formato.
Eliminazione di elementi di array
Per l'inserimento, abbiamo utilizzato l'operatore di assegnazione. Allo stesso modo, possiamo usaredeleteistruzione per rimuovere un elemento dall'array. La sintassi dell'istruzione delete è la seguente:
Sintassi
delete array_name[index]
L'esempio seguente elimina l'elemento orange. Quindi il comando non mostra alcun output.
Esempio
[jerry]$ awk 'BEGIN {
fruits["mango"] = "yellow";
fruits["orange"] = "orange";
delete fruits["orange"];
print fruits["orange"]
}'
Array multidimensionali
AWK supporta solo array unidimensionali. Ma puoi facilmente simulare un array multidimensionale utilizzando lo stesso array unidimensionale.
Ad esempio, di seguito è riportato un array bidimensionale 3x3 -
100 200 300
400 500 600
700 800 900
Nell'esempio precedente, array [0] [0] memorizza 100, array [0] [1] 200 e così via. Per memorizzare 100 nella posizione dell'array [0] [0], possiamo usare la seguente sintassi:
Sintassi
array["0,0"] = 100
Anche se abbiamo dato 0,0come indice, questi non sono due indici. In realtà, è solo un indice con la stringa0,0.
L'esempio seguente simula un array 2-D:
Esempio
[jerry]$ awk 'BEGIN {
array["0,0"] = 100;
array["0,1"] = 200;
array["0,2"] = 300;
array["1,0"] = 400;
array["1,1"] = 500;
array["1,2"] = 600;
# print array elements
print "array[0,0] = " array["0,0"];
print "array[0,1] = " array["0,1"];
print "array[0,2] = " array["0,2"];
print "array[1,0] = " array["1,0"];
print "array[1,1] = " array["1,1"];
print "array[1,2] = " array["1,2"];
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600
È inoltre possibile eseguire una serie di operazioni su un array come l'ordinamento dei suoi elementi / indici. A tale scopo, puoi usareassort e asorti funzioni
Come altri linguaggi di programmazione, AWK fornisce istruzioni condizionali per controllare il flusso di un programma. Questo capitolo spiega le istruzioni di controllo di AWK con esempi appropriati.
If dichiarazione
Verifica semplicemente la condizione ed esegue determinate azioni a seconda della condizione. Di seguito è riportata la sintassi diif dichiarazione -
Sintassi
if (condition)
action
Possiamo anche usare un paio di parentesi graffe come indicato di seguito per eseguire più azioni:
Sintassi
if (condition) {
action-1
action-1
.
.
action-n
}
Ad esempio, il seguente esempio controlla se un numero è pari o meno:
Esempio
[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Produzione
10 is even number.
If Else Statement
In if-else sintassi, possiamo fornire un elenco di azioni da eseguire quando una condizione diventa falsa.
La sintassi di if-else l'affermazione è la seguente:
Sintassi
if (condition)
action-1
else
action-2
Nella sintassi precedente, l'azione-1 viene eseguita quando la condizione restituisce true e l'azione-2 viene eseguita quando la condizione restituisce false. Ad esempio, il seguente esempio controlla se un numero è pari o meno:
Esempio
[jerry]$ awk 'BEGIN {
num = 11; if (num % 2 == 0) printf "%d is even number.\n", num;
else printf "%d is odd number.\n", num
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
11 is odd number.
If-Else-If Ladder
Possiamo facilmente creare un file if-else-if ladder utilizzando multiple if-elsedichiarazioni. Il seguente esempio lo dimostra:
Esempio
[jerry]$ awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
a = 30
Questo capitolo spiega i loop di AWK con un esempio appropriato. I cicli vengono utilizzati per eseguire una serie di azioni in modo ripetuto. L'esecuzione del ciclo continua fino a quando la condizione del ciclo è vera.
Per Loop
La sintassi di for il ciclo è -
Sintassi
for (initialization; condition; increment/decrement)
action
Inizialmente, il foristruzione esegue l'azione di inizializzazione, quindi controlla la condizione. Se la condizione è vera, esegue le azioni, quindi esegue l'operazione di incremento o decremento. L'esecuzione del ciclo continua finché la condizione è vera. Ad esempio, il seguente esempio stampa da 1 a 5 utilizzandofor loop -
Esempio
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
1
2
3
4
5
While Loop
Il whileloop continua a eseguire l'azione finché una particolare condizione logica non restituisce true. Ecco la sintassi diwhile loop -
Sintassi
while (condition)
action
AWK verifica prima la condizione; se la condizione è vera, esegue l'azione. Questo processo si ripete fintanto che la condizione del ciclo viene valutata vera. Ad esempio, il seguente esempio stampa da 1 a 5 utilizzandowhile loop -
Esempio
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
1
2
3
4
5
Loop Do-While
Il do-whileè simile al ciclo while, tranne per il fatto che la condizione di test viene valutata alla fine del ciclo. Ecco la sintassi dido-whileloop -
Sintassi
do
action
while (condition)
In un do-whileciclo, l'istruzione di azione viene eseguita almeno una volta anche quando l'istruzione di condizione restituisce false. Ad esempio, il seguente esempio stampa da 1 a 5 numeri utilizzandodo-while loop -
Esempio
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
1
2
3
4
5
Istruzione Break
Come suggerisce il nome, viene utilizzato per terminare l'esecuzione del ciclo. Ecco un esempio che termina il ciclo quando la somma diventa maggiore di 50.
Esempio
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Continua dichiarazione
Il continueviene utilizzata all'interno di un ciclo per passare alla successiva iterazione del ciclo. È utile quando si desidera saltare l'elaborazione di alcuni dati all'interno del ciclo. Ad esempio, il seguente esempio utilizzacontinue istruzione per stampare i numeri pari compresi tra 1 e 20.
Esempio
[jerry]$ awk 'BEGIN {
for (i = 1; i <= 20; ++i) {
if (i % 2 == 0) print i ; else continue
}
}'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
2
4
6
8
10
12
14
16
18
20
Istruzione Exit
Viene utilizzato per interrompere l'esecuzione dello script. Accetta un numero intero come argomento che è il codice dello stato di uscita per il processo AWK. Se non viene fornito alcun argomento,exitrestituisce lo stato zero. Ecco un esempio che interrompe l'esecuzione quando la somma diventa maggiore di 50.
Esempio
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
Produzione
Eseguendo questo codice, ottieni il seguente risultato:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Controlliamo lo stato di ritorno dello script.
Esempio
[jerry]$ echo $?
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
10
AWK ha una serie di funzioni integrate che sono sempre disponibili per il programmatore. Questo capitolo descrive aritmetica, stringa, tempo, manipolazione di bit e altre funzioni varie con esempi appropriati.
S.No. | Funzioni e descrizione incorporate |
---|---|
1 | Funzioni aritmetiche AWK ha le seguenti funzioni aritmetiche incorporate. |
2 | Funzioni stringa AWK ha le seguenti funzioni String incorporate. |
3 | Funzioni temporali AWK ha le seguenti funzioni temporali integrate. |
4 | Funzioni di manipolazione dei bit AWK ha le seguenti funzioni di manipolazione dei bit integrate. |
5 | Funzioni varie AWK ha le seguenti funzioni varie. |
Le funzioni sono gli elementi costitutivi di base di un programma. AWK ci consente di definire le nostre funzioni. Un programma di grandi dimensioni può essere suddiviso in funzioni e ciascuna funzione può essere scritta / testata in modo indipendente. Fornisce la riutilizzabilità del codice.
Di seguito è riportato il formato generale di una funzione definita dall'utente:
Sintassi
function function_name(argument1, argument2, ...) {
function body
}
In questa sintassi, il function_nameè il nome della funzione definita dall'utente. Il nome della funzione deve iniziare con una lettera e il resto dei caratteri può essere qualsiasi combinazione di numeri, caratteri alfabetici o trattino basso. Le parole di riserva di AWK non possono essere utilizzate come nomi di funzioni.
Le funzioni possono accettare più argomenti separati da virgola. Gli argomenti non sono obbligatori. È inoltre possibile creare una funzione definita dall'utente senza alcun argomento.
function body consiste in una o più istruzioni AWK.
Scriviamo due funzioni che calcolano il numero minimo e massimo e chiamiamo queste funzioni da un'altra funzione chiamata main. Ilfunctions.awk il file contiene -
Esempio
# Returns minimum number
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Returns maximum number
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Main function
function main(num1, num2){
# Find minimum number
result = find_min(10, 20)
print "Minimum =", result
# Find maximum number
result = find_max(10, 20)
print "Maximum =", result
}
# Script execution starts here
BEGIN {
main(10, 20)
}
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Minimum = 10
Maximum = 20
Finora, abbiamo visualizzato i dati sul flusso di output standard. Possiamo anche reindirizzare i dati a un file. Viene visualizzato un reindirizzamento dopoprint o printfdichiarazione. I reindirizzamenti in AWK vengono scritti proprio come i reindirizzamenti nei comandi della shell, tranne per il fatto che vengono scritti all'interno del programma AWK. Questo capitolo spiega il reindirizzamento con esempi appropriati.
Operatore di reindirizzamento
La sintassi dell'operatore di reindirizzamento è:
Sintassi
print DATA > output-file
Scrive i dati nel file output-file. Se il file di output non esiste, ne crea uno. Quando viene utilizzato questo tipo di reindirizzamento, il file di output viene cancellato prima che venga scritto il primo output. Le successive operazioni di scrittura sullo stesso file di output non cancellano il file di output, ma vi aggiungono. Ad esempio, il seguente esempio scriveHello, World !!! al file.
Creiamo un file con alcuni dati di testo.
Esempio
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Ora reindirizziamo alcuni contenuti al suo interno utilizzando l'operatore di reindirizzamento di AWK.
Esempio
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Hello, World !!!
Operatore di aggiunta
La sintassi dell'operatore di accodamento è la seguente:
Sintassi
print DATA >> output-file
Aggiunge i dati nel file output-file. Se il file di output non esiste, ne crea uno. Quando viene utilizzato questo tipo di reindirizzamento, i nuovi contenuti vengono aggiunti alla fine del file. Ad esempio, il seguente esempio aggiungeHello, World !!! al file.
Creiamo un file con alcuni dati di testo.
Esempio
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Ora aggiungiamoci alcuni contenuti usando l'operatore di accodamento di AWK.
Esempio
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Hello, World !!!
Tubo
È possibile inviare l'output a un altro programma tramite una pipe invece di utilizzare un file. Questo reindirizzamento apre una pipe al comando e scrive i valori degli elementi attraverso questa pipe in un altro processo per eseguire il comando. Il comando dell'argomento di reindirizzamento è in realtà un'espressione AWK. Ecco la sintassi di pipe:
Sintassi
print items | command
Usiamo tr comando per convertire le lettere minuscole in maiuscole.
Esempio
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
HELLO, WORLD !!!
Comunicazione bidirezionale
AWK può comunicare con un processo esterno utilizzando |&, che è una comunicazione a due vie. Ad esempio, il seguente esempio utilizzatrcomando per convertire le lettere minuscole in maiuscole. Nostrocommand.awk il file contiene -
Esempio
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
HELLO, WORLD !!!
Lo script sembra criptico? Demistifichiamolo.
La prima affermazione, cmd = "tr [a-z] [A-Z]", è il comando a cui stabiliamo la comunicazione bidirezionale da AWK.
L'istruzione successiva, ovvero il comando print, fornisce l'input al file trcomando. Qui&| indica la comunicazione a due vie.
La terza affermazione, cioè close(cmd, "to"), chiude il file to processo dopo aver concorso alla sua esecuzione.
La prossima dichiarazione cmd |& getline out memorizza il file output nella variabile out con l'aiuto della funzione getline.
La successiva istruzione print stampa l'output e infine il file close la funzione chiude il comando.
Finora abbiamo utilizzato AWK print e printffunzioni per visualizzare i dati sullo standard output. Ma printf è molto più potente di quello che abbiamo visto prima. Questa funzione è presa in prestito dal linguaggio C ed è molto utile durante la produzione di output formattato. Di seguito è riportata la sintassi dell'istruzione printf:
Sintassi
printf fmt, expr-list
Nella sintassi sopra fmt è una stringa di specifiche di formato e costanti. expr-list è un elenco di argomenti corrispondenti agli identificatori di formato.
Sequenze di escape
Simile a qualsiasi stringa, il formato può contenere sequenze di escape incorporate. Di seguito sono discusse le sequenze di escape supportate da AWK -
Nuova linea
Viene stampato il seguente esempio Hello e World in righe separate usando il carattere di nuova riga -
Example
[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Hello
World
Tab orizzontale
L'esempio seguente utilizza una tabulazione orizzontale per visualizzare un campo diverso:
Example
[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'
Quando si esegue il codice sopra, si ottiene il seguente risultato:
Output
Sr No Name Sub Marks
Tab verticale
L'esempio seguente utilizza una tabulazione verticale dopo ogni file:
Example
[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Sr No
Name
Sub
Marks
Backspace
L'esempio seguente stampa un backspace dopo ogni campo tranne l'ultimo. Cancella l'ultimo numero dai primi tre campi. Per esempio,Field 1 viene visualizzato come Field, perché l'ultimo carattere viene cancellato con backspace. Tuttavia, l'ultimo campoField 4 viene visualizzato così com'è, poiché non avevamo un file \b dopo Field 4.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Field Field Field Field 4
Ritorno in carrozza
Nell'esempio seguente, dopo aver stampato ogni campo, eseguiamo un file Carriage Return e stampa il valore successivo sopra il valore stampato corrente. Significa che, nell'output finale, puoi solo vedereField 4, poiché era l'ultima cosa da stampare sopra tutti i campi precedenti.
Example
[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Field 4
Avanzamento modulo
L'esempio seguente utilizza l'avanzamento modulo dopo la stampa di ogni campo.
Example
[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Sr No
Name
Sub
Marks
Identificatore di formato
Come nel linguaggio C, AWK ha anche identificatori di formato. La versione AWK dell'istruzione printf accetta i seguenti formati di specifica di conversione:
% c
Stampa un singolo carattere. Se l'argomento utilizzato per%cè numerico, viene trattato come un carattere e stampato. In caso contrario, si presume che l'argomento sia una stringa e viene stampato l'unico primo carattere di quella stringa.
Example
[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'
Output
Eseguendo questo codice, ottieni il seguente risultato:
ASCII value 65 = character A
% de% i
Stampa solo la parte intera di un numero decimale.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 80
% e e% E
Stampa un numero in virgola mobile nella forma [-] d.dddddde [+ -] dd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 8.066000e+01
Il %E formato utilizza E invece di e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 8.066000E+01
% f
Stampa un numero in virgola mobile nella forma [-] ddd.dddddd.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 80.660000
% ge% G
Utilizza la conversione% e o% f, a seconda di quale è più breve, con gli zeri non significativi soppressi.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'
Output
Eseguendo questo codice, ottieni il seguente risultato:
Percentags = 80.66
Il %G formato utilizza %E invece di% e.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 80.66
% o
Stampa un numero ottale senza segno.
Example
[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Octal representation of decimal number 10 = 12
% u
Stampa un numero decimale senza segno.
Example
[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Unsigned 10 = 10
%S
Stampa una stringa di caratteri.
Example
[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Name = Sherlock Holmes
% x e% X
Stampa un numero esadecimale senza segno. Il%X il formato utilizza lettere maiuscole invece di minuscole.
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Hexadecimal representation of decimal number 15 = f
Ora usa% X e osserva il risultato -
Example
[jerry]$ awk 'BEGIN {
printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Hexadecimal representation of decimal number 15 = F
%%
Stampa un singolo % carattere e nessun argomento viene convertito.
Example
[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Percentags = 80%
Parametri opzionali con%
Con % possiamo utilizzare i seguenti parametri opzionali:
Larghezza
Il campo è imbottito al width. Per impostazione predefinita, il campo viene riempito con spazi ma quando viene utilizzato il flag 0, viene riempito con zero.
Example
[jerry]$ awk 'BEGIN {
num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Num1 = 10
Num2 = 20
Zeri iniziali
Uno zero iniziale funge da flag, che indica che l'output deve essere riempito con zeri anziché spazi. Si noti che questo flag ha effetto solo quando il campo è più largo del valore da stampare. Il seguente esempio descrive questo:
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Num1 = -0010
Num2 = 00020
Giustificazione a sinistra
L'espressione dovrebbe essere giustificata a sinistra all'interno del suo campo. Quando la stringa di input è inferiore al numero di caratteri specificato e si desidera che sia giustificata a sinistra, cioè aggiungendo spazi a destra, utilizzare un simbolo meno (-) immediatamente dopo la% e prima del numero.
Nell'esempio seguente, l'output del comando AWK viene reindirizzato al comando cat per visualizzare il carattere END OF LINE ($).
Example
[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte
Eseguendo questo codice, ottieni il seguente risultato:
Output
Num = 10 $
Segno di prefisso
Aggiunge sempre un segno ai valori numerici, anche se il valore è positivo.
Example
[jerry]$ awk 'BEGIN {
num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Num1 = -10
Num2 = +20
Hash
Per% o, fornisce uno zero iniziale. Per% x e% X, fornisce rispettivamente uno 0x o 0X iniziale, solo se il risultato è diverso da zero. Per% e,% E,% f e% F, il risultato contiene sempre un punto decimale. Per% ge% G, gli zeri finali non vengono rimossi dal risultato. Il seguente esempio descrive questo:
Example
[jerry]$ awk 'BEGIN {
printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'
Eseguendo questo codice, ottieni il seguente risultato:
Output
Octal representation = 012
Hexadecimal representation = 0XA