Awk

Come usare AWK su Linux

Come usare AWK su Linux

Le utilità offerte da Linux spesso seguono la filosofia del design UNIX. Qualsiasi strumento dovrebbe essere piccolo, utilizzare testo normale per l'I/O e funzionare 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 distribuzioni Linux. AWK stesso è un linguaggio di programmazione. Lo strumento AWK è solo un interprete del linguaggio di programmazione AWK. In questa guida, scopri come usare 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 riga per riga, sull'intero file di testo.

Il comportamento predefinito di awk è usare gli spazi bianchi (spazi, tabulazioni, ecc.).) per separare i campi. Per fortuna, molti dei file di configurazione su Linux seguono questo schema.

Sintassi di base

Ecco come appare la struttura dei comandi di awk.

$ awk '// ; ; '

Le parti del comando sono abbastanza autoesplicative. Awk può funzionare senza la parte di ricerca o azione. Se non viene specificato nulla, l'azione predefinita sulla corrispondenza sarà solo la stampa. Fondamentalmente, awk stamperà tutte le corrispondenze trovate nel file.

Se non è specificato alcun modello di ricerca, awk eseguirà le azioni specificate su ogni singola riga del file.

Se vengono fornite entrambe le parti, awk utilizzerà il modello per determinare se la riga corrente lo riflette. Se corrisponde, awk esegue l'azione specificata.

Nota che awk può funzionare anche su testi reindirizzati. Ciò può essere ottenuto inviando il contenuto del comando su awk per agire su pi. Scopri di più sul comando pipe di Linux.

A scopo dimostrativo, ecco un file di testo di esempio. Contiene 10 righe, 2 parole per riga.

$ campione di gatto.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 sintassi delle espressioni regolari più comuni. Queste sintassi regex non sono solo uniche per awk. Queste sono sintassi regex quasi universali, quindi padroneggiarle aiuterà anche in altre app/programmazioni che coinvolgono l'espressione regolare.

  • Caratteri di base: Tutti i caratteri alfanumerici sottolineano (_) ecc.
    • Set di caratteri: per semplificare le cose, ci sono gruppi di caratteri nell'espressione regolare. Ad esempio, lettere maiuscole (A-Z), minuscole (a-z) e numeri (0-9).
  • Meta-caratteri: Questi sono personaggi che spiegano vari modi per espandere i personaggi ordinari.
    • Periodo (.): Qualsiasi corrispondenza di carattere nella posizione è valida (tranne una nuova riga).
    • Asterisco (*): Sono valide zero o più esistenze del carattere immediatamente precedente.
    • Parentesi ([]): La corrispondenza è valida se, nella posizione, uno qualsiasi dei caratteri della parentesi è abbinato. Può essere combinato con i set di caratteri.
    • Cattivo (^): La partita dovrà essere all'inizio della linea.
    • Dollaro ($): La partita dovrà essere alla fine della linea.
    • Barra rovesciata (\): Se qualsiasi meta-carattere deve essere usato in senso letterale.

Stampare il testo

Per stampare tutto il contenuto di un file di testo, usa il comando print. Nel caso del modello di ricerca, non è definito alcun modello pattern. Quindi, awk stampa tutte le righe.

$ awk 'print' campione.TXT

Qui, "stampa" è un comando AWK che stampa il contenuto dell'input.

Ricerca di stringhe

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 "quick" su tutte le righe del file sample.TXT.

$ awk '/rapido/' 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 '/^marrone/' campione.TXT

Che ne dici di trovare qualcosa alla fine di una riga?? Il seguente comando stamperà tutte le righe che hanno "veloce" alla fine.

$ awk '/quick$/' campione.TXT

Modello di carta jolly

Il prossimo esempio mostrerà l'uso del cursore (.). Qui possono esserci due caratteri qualsiasi prima del carattere "e".

$ awk '/… e/'  campione.TXT

Schema jolly (usando l'asterisco)

Cosa succede se ci può essere un numero qualsiasi di caratteri nella posizione?? Per associare qualsiasi possibile carattere alla posizione, utilizzare l'asterisco (*). Qui, AWK abbinerà tutte le righe che hanno un numero qualsiasi di caratteri dopo "il".

$ awk '/il*/' campione.TXT

Espressione tra parentesi

L'esempio seguente mostrerà come utilizzare l'espressione tra parentesi. L'espressione tra parentesi indica che nella posizione, la corrispondenza sarà valida se corrisponde al set di caratteri racchiuso tra parentesi bracket. Ad esempio, il seguente comando corrisponderà a "The" 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 troverà tutte le parole che contengono una lettera maiuscola.

$ awk '/[A-Z]/' campione.TXT

Dai un'occhiata al seguente utilizzo dei set di caratteri con l'espressione tra parentesi.

  • [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 singola lettera
  • [a-zA-z 0-9]: indica un singolo carattere o cifra.

Awk variabili predefinite

AWK viene fornito con una serie di variabili predefinite e automatiche. Queste variabili possono semplificare la scrittura di programmi e script con AWK.

Ecco alcune delle variabili AWK più comuni che incontrerai.

  • NOME DEL FILE: Il nome del file di input corrente.
  • RS: Il separatore di record. A causa della natura di AWK, elabora i dati un record alla volta. Qui, questa variabile specifica il delimitatore utilizzato per suddividere il flusso di dati in record. Per impostazione predefinita, questo valore è il carattere di nuova riga.
  • NR: Il numero del record di input corrente. Se il valore RS è impostato sul valore predefinito, questo valore indicherà il numero della linea di input corrente.
  • FS/OFS: il carattere o i caratteri utilizzati 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 riunisce tutti i campi. Tuttavia, in questo momento, AWK utilizza il separatore OFS invece del separatore FS. In generale, sia FS che OFS sono uguali ma non sono obbligatori per esserlo.
  • 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: Il separatore di record per i dati di output. Il valore predefinito è il carattere di nuova riga.

Controlliamoli in azione. Il seguente comando utilizzerà la variabile NR per stampare dalla riga 2 alla riga 4 dell'esempio.TXT. AWK supporta anche operatori logici come logical e (&&).

$ awk 'NR > 1 && NR < 5' sample.txt

Per assegnare un valore specifico a una variabile AWK, usa la seguente struttura.

$ awk '// ; ; ' =,

Ad esempio, per rimuovere tutte le righe vuote dal file di input, modificare il valore di RS praticamente in nulla. È un trucco che utilizza 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 riga con una o più righe vuote. In POSIX, una riga vuota senza contenuto è completamente vuota. Tuttavia, se la riga contiene spazi bianchi, non è considerata "vuota".

$ awk 'print' RS=" campione.TXT

Risorse addizionali

AWK è uno strumento potente con tantissime funzioni. Anche se questa guida ne copre molti, sono ancora solo le basi. Masterizzare 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 gli spazi bianchi
  • Utilizzo di un'istruzione condizionale
  • Stampa un intervallo di colonne
  • Regex con AWK
  • 20 esempi AWK

Internet è un buon posto per imparare qualcosa. Ci sono un sacco di fantastici tutorial sulle basi di AWK per utenti molto avanzati.

pensiero finale

Si spera che questa guida abbia aiutato a fornire una buona comprensione delle basi di AWK. Anche se potrebbe volerci un po' di tempo, padroneggiare AWK è estremamente gratificante in termini di potenza che conferisce.

Buon calcolo!

Come mostrare l'overlay OSD in app e giochi Linux a schermo intero
Giocare a giochi a schermo intero o utilizzare app in modalità a schermo intero senza distrazioni può tagliarti fuori dalle informazioni di sistema ri...
Le 5 migliori carte di acquisizione del gioco
Abbiamo tutti visto e amato i giochi in streaming su YouTube. PewDiePie, Jakesepticye e Markiplier sono solo alcuni dei migliori giocatori che hanno g...
Come sviluppare un gioco su Linux
Un decennio fa, non molti utenti Linux avrebbero previsto che il loro sistema operativo preferito un giorno sarebbe diventato una piattaforma di gioco...