AWK - Esempi di base

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.