Come usare Awk su Linux

Come usare Awk su Linux

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.

  • Caratteri di base: Tutti i caratteri alfanumerici sottolineano (_) ecc.
    • Set di personaggi: per semplificare le cose, ci sono gruppi di personaggi nel Regex. Ad esempio, maiuscole (A-Z), minuscole (A-Z) e cifre numeriche (0-9).
  • Meta-caratteri: Questi sono personaggi che spiegano vari modi per espandere i personaggi ordinari.
    • Periodo (.): Qualsiasi corrispondenza di personaggi nella posizione è valida (tranne una nuova linea).
    • Asterisk (*): Zero o più esistenze del carattere immediato precedente è valido.
    • Parentesi ([]): La partita è valida se, nella posizione, uno dei caratteri della staffa è abbinato. Può essere combinato con set di caratteri.
    • Custode (^): La partita dovrà essere all'inizio della linea.
    • Dollaro ($): La partita dovrà essere alla fine della linea.
    • Backslash (\): Se un meta-character deve essere usato in senso letterale.

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.

  • [0-9]: indica una singola cifra
  • [A-Z]: indica una singola lettera minuscola
  • [A-Z]: indica una singola lettera maiuscola
  • [A-Za-Z]: indica una sola lettera
  • [A-Za-Z 0-9]: indica un singolo carattere o una cifra.

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.

  • NOME DEL FILE: Il nome file del file di input corrente.
  • Rs: Il separatore record. A causa della natura di AWK, elabora i dati un record alla volta. Qui, questa variabile specifica il delimitatore utilizzato per dividere il flusso di dati nei record. Per impostazione predefinita, questo valore è il carattere newline.
  • Nr: Il numero di record di input corrente. Se il valore RS è impostato su predefinito, questo valore indicherà il numero della riga di ingresso corrente.
  • Fs/ofs: I caratteri usati come separatore di campo. Una volta letto, Awk divide un record in diversi campi. Il delimitatore è definito dal valore di FS. Durante la stampa, Awk si rallegra di tutti i campi. Tuttavia, in questo momento, AWK usa il separatore OFS anziché il separatore FS. Generalmente, sia FS che OF sono uguali ma non obbligatori.
  • Nf: Il numero di campi nel record corrente. Se viene utilizzato il valore predefinito "spazio bianco", corrisponderà al numero di parole nel record corrente.
  • Ors: Separatore record per i dati di output. Il valore predefinito è il carattere newline.

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.

  • Taglia lo spazio bianco
  • Usando un'istruzione condizionale
  • Stampa una gamma di colonne
  • Regex con Awk
  • 20 esempi AWK

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!