Articles

awk scripting spiegato con esempi pratici

Posted on

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *