L'offerta di utility Linux segue spesso la filosofia UNIX del design. Qualsiasi strumento dovrebbe essere piccolo, utilizzare il testo semplice per I/O e operare in modo modulare. Grazie all'eredità, abbiamo alcune delle migliori funzionalità di elaborazione del testo con l'aiuto di strumenti come SED e AWK.
In Linux, lo strumento AWK è preinstallato su tutte le distro Linux. Awk stesso è un linguaggio di programmazione. Lo strumento AWK è solo un interprete del linguaggio di programmazione AWK. In questa guida, controlla come utilizzare AWK su Linux.
Utilizzo awk
Lo strumento AWK è molto utile quando i testi sono organizzati in un formato prevedibile. È abbastanza bravo ad analizzare e manipolare i dati tabulari. Funziona su una base per riga, sull'intero file di testo.
Il comportamento predefinito di AWK è usare spazi bianchi (spazi, schede, ecc.) per separare i campi. Per fortuna, molti dei file di configurazione su Linux seguono questo modello.
Sintassi di base
Ecco come appare la struttura di comando di Awk.
$ awk '// ; ; '
Le parti del comando sono abbastanza autoesplicative. AWK può operare senza la parte di ricerca o azione. Se non viene specificato nulla, l'azione predefinita in corrispondenza sarà semplicemente stampata. Fondamentalmente, AWK stamperà tutte le partite trovate nel file.
Se non esiste un modello di ricerca specificato, AWK eseguirà le azioni specificate su ogni singola riga del file.
Se vengono fornite entrambe le parti, allora AWK utilizzerà il modello per determinare se la linea corrente lo riflette. Se abbinato, AWK esegue l'azione specificata.
Si noti che AWK può anche funzionare su testi reindirizzati. Ciò può essere ottenuto dando di agire il contenuto del comando per agire. Ulteriori informazioni sul comando Linux Pipe.
Ai fini della demo, ecco un file di testo di esempio. Contiene 10 righe, 2 parole per riga.
$ cat campione.TXT
Espressione regolare
Una delle caratteristiche chiave che rendono AWK uno strumento potente è il supporto dell'espressione regolare (Regex, in breve). Un'espressione regolare è una stringa che rappresenta un certo modello di caratteri.
Ecco un elenco di alcune delle più comuni sintassi di espressione regolari. Queste sintassi di regex non sono solo unici da AWK. Queste sono quasi universali sintassi di regex, quindi padroneggiarli aiuterà anche in altre app/programmi che coinvolgono un'espressione regolare.
Stampa il testo
Per stampare tutti i contenuti di un file di testo, utilizzare il comando di stampa. Nel caso del modello di ricerca, non esiste un modello definito. Quindi, Awk stampa tutte le linee.
$ awk 'print' campione.TXT
Qui, "Print" è un comando AWK che stampa il contenuto dell'input.
Ricerca stringa
AWK può eseguire una ricerca di testo di base sul testo dato. Nella sezione del modello, deve essere il testo da trovare.
Nel comando seguente, AWK cercherà il testo "veloce" su tutte le righe del campione di file.TXT.
$ awk '/Quick/' campione.TXT
Ora, usiamo alcune espressioni regolari per perfezionare ulteriormente la ricerca. Il seguente comando stamperà tutte le righe che hanno "marrone" all'inizio.
$ awk '/^Brown/' campione.TXT
Che ne dici di trovare qualcosa alla fine di una linea? Il seguente comando stamperà tutte le righe che hanno "rapido" alla fine.
$ awk '/Quick $/' campione.TXT
Pattern wild card
Il prossimo esempio sta per mostrare l'uso del caret (.). Qui, ci possono essere due caratteri prima del personaggio "E".
$ awk '/… e/' campione.TXT
Pattern wild card (usando asterisk)
Cosa succede se ci può essere un numero qualsiasi di caratteri nella posizione? Per abbinare ogni possibile carattere nella posizione, usa l'asterisco (*). Qui, Awk corrisponderà a tutte le righe che hanno qualsiasi quantità di caratteri dopo "il".
$ awk '/the*/' campione.TXT
Espressione della parentesi
L'esempio seguente mostrerà come usare l'espressione della staffa. L'espressione della staffa dice che nella posizione, la corrispondenza sarà valida se corrisponde al set di caratteri racchiusi dalle staffe. Ad esempio, il seguente comando corrisponderà a "il" e "tee" come corrispondenze valide.
$ awk '/t [he] e/' campione.TXT
Ci sono alcuni set di caratteri predefiniti nell'espressione regolare. Ad esempio, l'insieme di tutte le lettere maiuscole è etichettato come "A-Z". Nel comando seguente, AWK corrisponderà a tutte le parole che contengono una lettera maiuscola.
$ awk '/[a-z]/' campione.TXT
Dai un'occhiata al seguente utilizzo dei set di caratteri con espressione della staffa.
Variabili predefinite AWK
AWK viene fornito con un mucchio di variabili predefinite e automatiche. Queste variabili possono rendere più facili programmi di scrittura e script con AWK.
Ecco alcune delle variabili AWK più comuni che incontrerai.
Controlliamoli in azione. Il comando seguente utilizzerà la variabile NR per stampare la riga da 2 alla riga 4 dal campione.TXT. AWK supporta anche operatori logici come logico e (&&).
$ awk 'nr> 1 && nr < 5' sample.txt
Per assegnare un valore specifico a una variabile AWK, utilizzare la seguente struttura.
$ awk '// ; ; '= ,
Ad esempio, per rimuovere tutte le righe vuote dal file di input, modificare il valore di RS praticamente nulla. È un trucco che usa un'oscura regola posix. Specifica che se il valore di RS è una stringa vuota, i record sono separati da una sequenza che consiste in una nuova linea con una o più righe vuote. In Posix, una linea vuota senza contenuto è completamente vuota. Tuttavia, se la linea contiene spazi bianchi, allora non è considerata "vuota".
$ awk 'print' rs = "campione.TXT
Risorse addizionali
Awk è uno strumento potente con tonnellate di funzionalità. Mentre questa guida ne copre molti, sono ancora solo le basi. Mastering Awk richiederà più di questo. Questa guida dovrebbe essere una bella introduzione allo strumento.
Se vuoi davvero padroneggiare lo strumento, ecco alcune risorse aggiuntive che dovresti controllare.
Internet è un buon posto per imparare qualcosa. Ci sono molti fantastici tutorial su basi awk per utenti molto avanzati.
Pensiero finale
Speriamo che questa guida abbia contribuito a fornire una buona comprensione delle basi AWK. Mentre potrebbe richiedere del tempo, Mastering Awk è estremamente gratificante in termini di potere che offre.
Felice calcolo!