GNU/Linux >> Linux Esercitazione >  >> Linux

Iniziare con awk, un potente strumento di analisi del testo

Awk è un potente strumento di analisi del testo per sistemi Unix e simili a Unix, ma poiché ha funzioni programmate che puoi utilizzare per eseguire attività di analisi comuni, è anche considerato un linguaggio di programmazione . Probabilmente non svilupperai la tua prossima applicazione GUI con awk e probabilmente non sostituirà il tuo linguaggio di scripting predefinito, ma è una potente utility per attività specifiche.

Quali possono essere questi compiti è sorprendentemente diverso. Il modo migliore per scoprire quale dei tuoi problemi potrebbe essere risolto al meglio da awk è imparare awk; rimarrai sorpreso di come awk possa aiutarti a fare di più ma con molto meno sforzo.

La sintassi di base di Awk è:

awk [options] 'pattern {action}' file

Per iniziare, crea questo file di esempio e salvalo come colours.txt

name       color  amount
apple      red    4
banana     yellow 6
strawberry red    3
grape      purple 10
apple      green  8
plum       purple 2
kiwi       brown  4
potato     brown  9
pineapple  yellow 5

Questi dati sono separati in colonne da uno o più spazi. È comune che i dati che stai analizzando siano organizzati in qualche modo. Potrebbero non essere sempre colonne separate da spazi bianchi, o anche da una virgola o da un punto e virgola, ma soprattutto nei file di registro o nei dump di dati, esiste generalmente uno schema prevedibile. Puoi utilizzare modelli di dati per aiutare awk a estrarre ed elaborare i dati su cui vuoi concentrarti.

Stampa di una colonna

In awk, la stampa la funzione mostra tutto ciò che specifichi. Ci sono molte variabili predefinite che puoi usare, ma alcune delle più comuni sono numeri interi che designano colonne in un file di testo. Provalo:

$ awk '{print $2;}' colours.txt
color
red
yellow
red
purple
green
purple
brown
brown
yellow

In questo caso, awk mostra la seconda colonna, indicata da $2 . Questo è relativamente intuitivo, quindi puoi probabilmente immaginare che stampa $ 1 visualizza la prima colonna e stampa $ 3 visualizza il terzo e così via.

Per visualizzare tutti colonne, utilizza $0 .

Il numero dopo il simbolo del dollaro ($ ) è un'espressione , quindi $ 2 e $(1+1) significa la stessa cosa.

Selezione condizionale delle colonne

Il file di esempio che stai utilizzando è molto strutturato. Ha una riga che funge da intestazione e le colonne si riferiscono direttamente l'una all'altra. Definendo condizionale requisiti, puoi qualificare ciò che desideri che awk restituisca quando guardi questi dati. Ad esempio, per visualizzare gli elementi nella colonna 2 che corrispondono a "giallo" e stampare il contenuto della colonna 1:

awk '$2=="yellow"{print $1}' colours.txt
banana
pineapple

Anche le espressioni regolari funzionano. Questo condizionale guarda a $ 2 per corrispondenze approssimative alla lettera p seguito da un numero qualsiasi di (uno o più) caratteri, che sono a loro volta seguiti dalla lettera p :

$ awk '$2 ~ /p.+p/ {print $0}' colours.txt
grape   purple  10
plum    purple  2

I numeri sono interpretati naturalmente da awk. Ad esempio, per stampare qualsiasi riga con una terza colonna contenente un numero intero maggiore di 5:

awk '$3>5 {print $1, $2}' colours.txt
name    color
banana  yellow
grape   purple
apple   green
potato  brown

Separatore di campo

Per impostazione predefinita, awk utilizza gli spazi bianchi come separatore di campo. Tuttavia, non tutti i file di testo utilizzano gli spazi bianchi per definire i campi. Ad esempio, crea un file chiamato colours.csv con questo contenuto:

name,color,amount
apple,red,4
banana,yellow,6
strawberry,red,3
grape,purple,10
apple,green,8
plum,purple,2
kiwi,brown,4
potato,brown,9
pineapple,yellow,5

Awk può trattare i dati esattamente allo stesso modo, purché tu specifichi quale carattere dovrebbe usare come separatore di campo nel tuo comando. Usa il --separatore di campo (o semplicemente -F in breve) opzione per definire il delimitatore:

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
banana
pineapple

Salvataggio output

Utilizzando il reindirizzamento dell'output, puoi scrivere i risultati in un file. Ad esempio:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt

Questo crea un file con il contenuto della tua query awk.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Puoi anche dividere un file in più file raggruppati in base ai dati della colonna. Ad esempio, se desideri dividere colors.txt in più file in base al colore visualizzato in ciascuna riga, puoi fare in modo che awk reindirizzi per query includendo il reindirizzamento nella tua dichiarazione awk:

$ awk '{print > $2".txt"}' colours.txt

Questo produce file denominati yellow.txt , red.txt , e così via.

Nel prossimo articolo imparerai di più su campi, record e alcune potenti variabili awk.

Questo articolo è adattato da un episodio di Hacker Public Radio, un podcast tecnologico della comunità.


Linux
  1. Iniziare con Zsh

  2. Iniziare con ls

  3. Iniziare con Samba per l'interoperabilità

  4. Introduzione a SSH in Linux

  5. Procedura:per iniziare con Ansible

Introduzione al sistema operativo Linux

Guida introduttiva a GitHub

Iniziare con Nix Package Manager

Iniziare con systemctl

Guida introduttiva al comando AWK [Guida per principianti]

Guida introduttiva al comando Tar