AWK - Funzioni varie

AWK ha le seguenti funzioni varie:

chiudi (espr)

Questa funzione chiude il file di pipe ..

Esempio

[jerry]$ awk '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.

  • La dichiarazione successiva, ovvero il file printcomando, fornisce l'input al comando tr. 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 l'output in out variabile con l'aiuto della funzione getline.

  • La successiva istruzione print stampa l'output e infine la funzione close chiude il comando.

Elimina

Questa funzione elimina un elemento da un array. L'esempio seguente mostra l'utilizzo didelete funzione -

Esempio

[jerry]$ awk 'BEGIN {
   arr[0] = "One"
   arr[1] = "Two"
   arr[2] = "Three"
   arr[3] = "Four"
   print "Array elements before delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
   delete arr[0]
   delete arr[1]
   print "Array elements after delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
}'

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

Array elements before delete operation:
One
Two
Three
Four

Array elements after delete operation:
Three
Four

Uscita

Questa funzione interrompe l'esecuzione di uno script. Accetta anche un optionalexprche diventa il valore di ritorno di AWK. Il seguente esempio descrive l'utilizzo della funzione di uscita.

Esempio

[jerry]$ awk 'BEGIN {
   print "Hello, World !!!"
   exit 10
   print "AWK never executes this statement."
}'

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

Hello, World !!!

fflush

Questa funzione svuota qualsiasi buffer associato al file di output aperto o alla pipe. La sintassi seguente mostra la funzione.

Sintassi

fflush([output-expr])

Se non viene fornito output-expr, svuota lo standard output. Se output-expr è la stringa nulla (""), svuota tutti i file aperti e le pipe.

getline

Questa funzione indica ad AWK di leggere la riga successiva. L'esempio seguente legge e visualizza il filemarks.txt file utilizzando la funzione getline.

Esempio

[jerry]$ awk '{getline; print $0}' marks.txt

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

Lo script funziona bene. Ma dov'è la prima riga? Cerchiamo di scoprirlo.

All'inizio, AWK legge la prima riga del file marks.txt e lo memorizza in $0 variabile.

E infine, AWK's printistruzione stampa la seconda riga. Questo processo continua fino alla fine del file.

Il prossimo

Il nextfunzione cambia il flusso del programma. Provoca l'arresto dell'elaborazione corrente dello spazio del pattern. Il programma legge la riga successiva e inizia a eseguire nuovamente i comandi con la nuova riga. Ad esempio, il seguente programma non esegue alcuna elaborazione quando una corrispondenza di pattern riesce.

Esempio

[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

1) Amit    Physics   80
2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

nextfile

Il nextfilefunzione cambia il flusso del programma. Arresta l'elaborazione del file di input corrente e avvia un nuovo ciclo attraverso le istruzioni pattern / procedure, iniziando dal primo record del file successivo. Ad esempio, il seguente esempio interrompe l'elaborazione del primo file quando una corrispondenza di pattern riesce.

Per prima cosa crea due file. Diciamofile1.txt contiene -

file1:str1
file1:str2
file1:str3
file1:str4

E file2.txt contiene -

file2:str1
file2:str2
file2:str3
file2:str4

Ora usiamo la funzione nextfile.

Esempio

[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

Produzione

Eseguendo questo codice, ottieni il seguente risultato:

file1:str1
file2:str1
file2:str2
file2:str3
file2:str4

ritorno

Questa funzione può essere utilizzata all'interno di una funzione definita dall'utente per restituire il valore. Si noti che il valore di ritorno di una funzione non è definito se non viene fornito expr. Il seguente esempio descrive l'utilizzo della funzione return.

Innanzitutto, crea un file functions.awk file contenente il comando AWK come mostrato di seguito -

Esempio

function addition(num1, num2) {
   result = num1 + num2
   return result
}
BEGIN {
   res = addition(10, 20)
   print "10 + 20 = " res
}

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

10 + 20 = 30

sistema

Questa funzione esegue il comando specificato e restituisce il suo stato di uscita. Uno stato di ritorno 0 indica che l'esecuzione di un comando è riuscita. Un valore diverso da zero indica un errore di esecuzione del comando. Ad esempio, il seguente esempio mostra la data corrente e mostra anche lo stato di ritorno del comando.

Esempio

[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

Eseguendo questo codice, ottieni il seguente risultato:

Produzione

Sun Dec 21 23:16:07 IST 2014
Return value = 0