AWK - Reindirizzamento dell'output
Finora, abbiamo visualizzato i dati sul flusso di output standard. Possiamo anche reindirizzare i dati a un file. Viene visualizzato un reindirizzamento dopoprint o printfdichiarazione. I reindirizzamenti in AWK vengono scritti proprio come i reindirizzamenti nei comandi della shell, tranne per il fatto che vengono scritti all'interno del programma AWK. Questo capitolo spiega il reindirizzamento con esempi appropriati.
Operatore di reindirizzamento
La sintassi dell'operatore di reindirizzamento è:
Sintassi
print DATA > output-file
Scrive i dati nel file output-file. Se il file di output non esiste, ne crea uno. Quando viene utilizzato questo tipo di reindirizzamento, il file di output viene cancellato prima che venga scritto il primo output. Le successive operazioni di scrittura sullo stesso file di output non cancellano il file di output, ma vi aggiungono. Ad esempio, il seguente esempio scriveHello, World !!! al file.
Creiamo un file con alcuni dati di testo.
Esempio
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Ora reindirizziamo alcuni contenuti al suo interno utilizzando l'operatore di reindirizzamento di AWK.
Esempio
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Hello, World !!!
Operatore di aggiunta
La sintassi dell'operatore di accodamento è la seguente:
Sintassi
print DATA >> output-file
Aggiunge i dati nel file output-file. Se il file di output non esiste, ne crea uno. Quando viene utilizzato questo tipo di reindirizzamento, i nuovi contenuti vengono aggiunti alla fine del file. Ad esempio, il seguente esempio aggiungeHello, World !!! al file.
Creiamo un file con alcuni dati di testo.
Esempio
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Ora aggiungiamo alcuni contenuti ad esso utilizzando l'operatore di accodamento di AWK.
Esempio
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
Old data
Hello, World !!!
Tubo
È possibile inviare l'output a un altro programma tramite una pipe invece di utilizzare un file. Questo reindirizzamento apre una pipe al comando e scrive i valori degli elementi attraverso questa pipe in un altro processo per eseguire il comando. Il comando dell'argomento di reindirizzamento è in realtà un'espressione AWK. Ecco la sintassi di pipe:
Sintassi
print items | command
Usiamo tr comando per convertire le lettere minuscole in maiuscole.
Esempio
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Eseguendo questo codice, ottieni il seguente risultato:
Produzione
HELLO, WORLD !!!
Comunicazione bidirezionale
AWK può comunicare con un processo esterno utilizzando |&, che è una comunicazione a due vie. Ad esempio, il seguente esempio utilizzatrcomando per convertire le lettere minuscole in maiuscole. Nostrocommand.awk il file contiene -
Esempio
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.
L'istruzione successiva, ovvero il comando print, fornisce l'input al file trcomando. 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 il file output nella variabile out con l'aiuto della funzione getline.
La successiva istruzione print stampa l'output e infine il file close la funzione chiude il comando.