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.