Il comando / strumento awk è usato per manipolare righe e colonne di testo in un file. Awk ha incorporato funzioni di stringa e array associativi. Awk supporta la maggior parte degli operatori, blocchi condizionali e disponibili nel linguaggio C. awk scripting
awk scripting
Una delle cose buone è che possiamo usare il comando awk insieme ad altri comandi per ottenere l’output richiesto. Possiamo anche convertire lo script awk in perl.
Sintassi di base di awk: ‘BEGIN {start_action} {action} END {stop_action}’ nome_file
Qui ci sono le azioni
- Begin block viene eseguito prima del file
- End block viene eseguito dopo l’elaborazione del file
- Il resto delle azioni viene eseguito durante l’elaborazione del file
Esempi: Creare un file con nome test sotto i dati in esso
# cat test
Dai dati di cui sopra, si può osservare che il file ha righe e colonne separate da spazio e le righe sono nuove linee. Per spiegare questo articolo useremo il file di test per alcuni esempi.
Sintassi del comando: awk ‘{print $3}’ test
Qui $3 significa stampare la terza colonna di tutte le colonne del file di test. Se volete stampare più colonne, menzionate i nomi delle colonne separate da una virgola $1,$2,$3….. sotto è l’output che è la terza colonna in tutte le righe
# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr
Per stampare la quarta e sesta colonna in un file usate awk ‘{print $4,$6}’ test
Qui i blocchi di inizio e fine non sono usati in awk. Quindi, il comando print verrà eseguito per ogni riga letta dal file. Nel prossimo esempio vedremo come usare i blocchi begin e end.
Stampa della somma del valore della colonna
Sintassi del comando: awk ‘BEGIN {sum=0} {sum=sum+$7} END {print sum}’ test
L’esempio precedente stamperà la somma del valore nella settima colonna. Nel blocco iniziale la variabile sum è assegnata con il valore 0. Nel blocco successivo il valore della 7a colonna viene aggiunto alla variabile sum. Questa aggiunta della 7a colonna alla variabile sum si ripete per ogni riga elaborata. Quando tutte le righe sono processate, la variabile sum conterrà la somma dei valori della 7a colonna. Questo valore viene stampato nel blocco finale come mostrato di seguito:
# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300
Somma del valore della colonna usando lo script awk
Nel secondo esempio abbiamo visto come sommare il valore della settima colonna, nello stesso modo invece di scrivere in una riga di dichiarazione scriviamo come script. Create un file sumofcolumn e incollate lo script sottostante in quel file
#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}
Ora eseguite lo script usando il comando awk come mostrato qui sotto
# awk -f sumofcolumn test300
Questo eseguirà lo script nel file sumofcolumn e mostrerà la somma della settima colonna nel test.
Trova la stringa e stampa la linea corrispondente
Sintassi del comando: awk ‘{if($9 == “arkit”) print $0;}’ test
L’esempio sopra riportato controlla la stringa “arkit” nella terza colonna e se trova una corrispondenza, stampa l’intera linea. L’output di questo comando awk è qui sotto
# awk '{ if($3 == "arkit") print $0;}' test
For loop con moltiplicazione del valore menzionato incrementato di +1
Sintassi del comando: awk ‘BEGIN { for(i=1;i<=10;i++) print “Valore moltiplicato di”, i, “è”,i*i; }’
Il comando precedente stamperà il moltiplicato dei primi numeri da 1 a 10. i++ aggiungerà +1 al numero in modo che continui ad aumentare fino a 10. L’output del comando è qui sotto
# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1
6. Separatore di campo
Hai già visto $0,$1,$2.. che stampa l’intera linea, la prima colonna, la seconda colonna… rispettivamente. Ora vedremo altre variabili costruite con esempi.
Come per il nostro file di esempio di test abbiamo colonne che sono separate da uno spazio, ma invece dello spazio se avete qualsiasi altro simbolo come .i.e. : , – possiamo farne uso per separare e stampare.
Esempio se avete : (due punti) come separatore allora usate qui sotto
awk ‘BEGIN {FS=”:”} {print $2}’ test
Oppure
awk -F: ‘{print $2}’ test
questo stamperà l’output come segue
# awk -F: '{print $2}' test41 file12
OFS – Variabile separatore di campo in output
Di default ogni volta che stampiamo i campi usando l’istruzione print i campi vengono visualizzati con il carattere spazio come delimitatore. Per esempio
Sintassi del comando: awk ‘{print $4,$5}’ test
# awk '{print $4,$5}' testroot 0
Possiamo cambiare questo comportamento di default usando la variabile OFS come
Sintassi del comando: awk ‘BEGIN {OFS=”:”} {print $4,$5}’ test
# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0
Nota: print $4,$5 e print $4$5 non funzionano allo stesso modo. Il primo visualizza l’output con lo spazio come delimitatore. Il secondo visualizza l’output senza alcun delimitatore.
NF – Numero di campi contati
NF può essere usato per conoscere il numero di campi in ogni linea, di seguito l’esempio di comando
# awk '{print NF}' test9
NR – numero di record count
NR può essere usato per conoscere il numero di linea o il conteggio delle linee in un file
# awk '{print NR}' test12345678910
L’esempio sopra riportato stamperà il numero di linea, nel file di prova abbiamo dieci linee.
Stampa del numero di record in un particolare file
Se vedete l’esempio precedente della nona sezione vengono stampati tutti i numeri di linea ma il requisito è che vorrei vedere solo il numero di record.
# awk 'END {print NR}' test10
Questo mostrerà il numero totale di linee nel file di test.
Funzioni di stringa in Awk:
Alcune delle funzioni di stringa in awk sono:
- index(string,search)
- length(string)
- split(string,array,separator)
- substr(string,posizione)
- substr(stringa,posizione,max)
- tolower(string)
- toupper(string)
Esempi avanzati:
Filtrare le righe usando la funzione Awk split
La funzione awk split divide una stringa in un array usando il delimitatore.
La sintassi della funzione split è
split(stringa, array, delimitatore)
Ora vedremo come filtrare le righe usando la funzione split con un esempio.
L’input “advanced.txt” contiene i dati nel seguente formato
# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444
L’output richiesto: Ora dobbiamo stampare solo le righe in cui il 2° campo ha la stringa “ARKIT” come 3° campo.
The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222
Il comando awk per ottenere l’output è sotto menzionato
Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222
Alcuni esempi di comandi / strumenti awk che vedremo nei prossimi post Stay tune.
Parole chiave: awk scripting in linux, come eseguire uno script awk in linux, come scrivere uno script awk in linux, awk in linux bash, awk in linux command, awk script examples linux, awk in linux example, awk in linux means, awk in linux pdf, awk in linux programming,awk in linux ppt, awk in linux shell script, awk command in linux shell scripting, awk in linux tutorial, awk in linux terminal, awk in linux with examples, awk scripting, awk scripting, awk scripting, awk scripting, awk scripting
Grazie per la lettura.