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