GNU/Linux >> Linux Esercitazione >  >> Linux

Esercitazione introduttiva di Awk – 7 Esempi di stampa di Awk

Questo è il primo articolo sulla nuova serie di tutorial di awk. Nelle prossime settimane pubblicheremo diversi articoli su awk che tratteranno tutte le funzionalità di awk con esempi pratici.

In questo articolo, esaminiamo la metodologia di lavoro fondamentale di awk insieme a 7 esempi pratici di stampa di awk.

Nota: Assicurati di rivedere la nostra precedente serie di tutorial Sed.

Introduzione Awk e operazioni di stampa

Awk è un linguaggio di programmazione che consente una facile manipolazione di dati strutturati e la generazione di report formattati. Awk sta per i nomi dei suoi autori “A oh, W einberger e K ernighan”

L'Awk viene utilizzato principalmente per la scansione e l'elaborazione di modelli. Cerca in uno o più file per vedere se contengono righe che corrispondono ai modelli specificati e quindi esegue le azioni associate.

Alcune delle caratteristiche chiave di Awk sono:

  • Awk visualizza un file di testo come record e campi.
  • Come un comune linguaggio di programmazione, Awk ha variabili, condizionali e loop
  • Awk ha operatori aritmetici e di stringa.
  • Awk può generare rapporti formattati

Awk legge da un file o dal suo standard input e invia l'output al suo standard output. Awk non va d'accordo con i file non di testo.

Syntax:

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' file

Nella sintassi awk sopra:

  • Il modello di ricerca è un'espressione regolare.
  • Azioni – dichiarazioni da eseguire.
  • In Awk sono possibili diversi schemi e azioni.
  • file:file di input.
  • Le virgolette singole attorno al programma servono ad evitare che la shell non interpreti nessuno dei suoi caratteri speciali.

Metodologia di lavoro Awk

  1. Awk legge i file di input una riga alla volta.
  2. Per ogni riga, corrisponde a un dato modello nell'ordine indicato, se corrisponde a eseguire l'azione corrispondente.
  3. Se nessun modello corrisponde, non verrà eseguita alcuna azione.
  4. Nella sintassi sopra, il pattern di ricerca o l'azione sono facoltativi, ma non entrambi.
  5. Se il modello di ricerca non viene fornito, Awk esegue le azioni indicate per ciascuna riga dell'input.
  6. Se l'azione non viene fornita, stampa tutte le righe che corrispondono ai modelli indicati, che è l'azione predefinita.
  7. Le parentesi graffe vuote senza alcuna azione non fanno nulla. Non eseguirà l'operazione di stampa predefinita.
  8. Ogni istruzione in Actions deve essere delimitata da punto e virgola.

Creiamo il file employee.txt con il seguente contenuto, che verrà utilizzato negli
esempi menzionati di seguito.

$cat employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Esempio Awk 1. Comportamento predefinito di Awk

Per impostazione predefinita, Awk stampa ogni riga del file.

$ awk '{print;}' employee.txt
100  Thomas  Manager    Sales       $5,000
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Nell'esempio sopra il modello non è fornito. Quindi le azioni sono applicabili a tutte le righe.
Action print senza alcun argomento stampa l'intera riga per impostazione predefinita. Quindi stampa tutte le
righe del file senza errore. Le azioni devono essere racchiuse tra parentesi graffe.

Esempio Awk 2. Stampa le linee che corrispondono al motivo.

$ awk '/Thomas/
> /Nisha/' employee.txt
100  Thomas  Manager    Sales       $5,000
400  Nisha   Manager    Marketing   $9,500

Nell'esempio sopra stampa tutta la linea che corrisponde a "Thomas" o "Nisha". Ha due modelli. Awk accetta un numero qualsiasi di pattern, ma ogni set (pattern e azioni corrispondenti) deve essere separato da una nuova riga.

Esempio Awk 3. Stampa solo un campo specifico.

Awk ha un numero di variabili integrate. Per ogni record, ad esempio riga, divide il record delimitato da uno spazio vuoto per impostazione predefinita e lo memorizza nelle variabili $n. Se la riga ha 4 parole, verrà memorizzata in $1, $2, $3 e $4. $0 rappresenta l'intera riga. NF è una variabile incorporata che rappresenta il numero totale di campi in un record.

$ awk '{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

$ awk '{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

Nell'esempio precedente $ 2 e $ 5 rappresentano rispettivamente Nome e Stipendio. Possiamo ottenere lo stipendio anche utilizzando $NF, dove $NF rappresenta l'ultimo campo. Nell'istruzione print ',' è un concatenatore.

Esempio Awk 4. Inizializzazione e azione finale

Awk ha due schemi importanti che sono specificati dalla parola chiave BEGIN e END.

Syntax: 

BEGIN { Actions}
{ACTION} # Action for everyline in a file
END { Actions }

# is for comments in Awk

Le azioni specificate nella sezione BEGIN verranno eseguite prima di iniziare a leggere le righe dall'input.
Le azioni END verranno eseguite dopo aver completato la lettura e l'elaborazione delle righe dall'input.

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name	Designation	Department	Salary
Thomas 	 Manager 	 Sales 	         $5,000
Jason 	 Developer 	 Technology 	 $5,500
Sanjay 	 Sysadmin 	 Technology 	 $7,000
Nisha 	 Manager 	 Marketing 	 $9,500
Randy 	 DBA 	 	 Technology 	 $6,000
Report Generated
--------------

Nell'esempio sopra, stampa il titolo e l'ultimo file per i rapporti.

Esempio Awk 5. Trova i dipendenti con ID dipendente maggiore di 200

$ awk '$1 >200' employee.txt
300  Sanjay  Sysadmin   Technology  $7,000
400  Nisha   Manager    Marketing   $9,500
500  Randy   DBA        Technology  $6,000

Nell'esempio precedente, il primo campo ($1) è l'ID dipendente. Quindi, se $ 1 è maggiore di 200, esegui semplicemente l'azione di stampa predefinita per stampare l'intera riga.

Esempio Awk 6. Stampa l'elenco dei dipendenti nel reparto Tecnologia

Ora il nome del dipartimento è disponibile come quarto campo, quindi è necessario verificare se $ 4 corrisponde alla stringa "Tecnologia", se sì stampa la riga.

$ awk '$4 ~/Technology/' employee.txt
200  Jason   Developer  Technology  $5,500
300  Sanjay  Sysadmin   Technology  $7,000
500  Randy   DBA        Technology  $6,000

L'operatore ~ ​​serve per il confronto con le espressioni regolari. Se corrisponde all'azione predefinita, ad esempio, verrà eseguita la stampa dell'intera riga.

Esempio Awk 7. Stampa il numero di dipendenti nel reparto Tecnologia

L'esempio seguente controlla se il dipartimento è Tecnologia, se è sì, in Azione, basta incrementare la variabile di conteggio, che è stata inizializzata con zero nella sezione BEGIN.

$ awk 'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in Technology Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

Quindi, alla fine del processo, stampa semplicemente il valore di conteggio che ti dà il numero di dipendenti nel reparto Tecnologia.

Lettura consigliata

Sed e Awk 101 Hacks, di Ramesh Natarajan . Trascorro diverse ore al giorno in ambiente UNIX/Linux a occuparmi di file di testo (dati, configurazione e file di registro). Uso Sed e Awk per tutto il mio lavoro di manipolazione del testo. Sulla base della mia esperienza con Sed e Awk, ho scritto Sed and Awk 101 Hacks eBook che contiene 101 esempi pratici su varie funzionalità avanzate di Sed e Awk che miglioreranno la tua vita UNIX / Linux. Anche se usi Sed e Awk da diversi anni e non hai letto questo libro, per favore fatti un favore e leggi questo libro. Rimarrai stupito dalle capacità delle utility Sed e Awk.

Articoli Awk aggiuntivi

  • Variabili Awk definite dall'utente con 3 esempi pratici
  • 8 potenti variabili integrate di Awk:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
  • 7 esempi di potenti operatori Awk (operatori unario, binario, aritmetico, stringa, di assegnazione, condizionale, Reg-Ex Awk)
  • 4 Esempi di istruzioni Awk If ( if, if else, if else if, :? )
  • Preso nel giro? Awk While, Do While, For Loop, Break, Continue, Exit Esempi

Linux
  1. Tutorial sul comando cd di Linux per principianti (8 esempi)

  2. Tutorial Awk:Comprendi le variabili Awk con 3 esempi pratici

  3. 4 Esempi di istruzioni Awk If ( if, if else, if else if, :? )

  4. Esempi di comandi awk in Linux

  5. awk:comando non trovato

Linux w Command Tutorial per principianti (5 esempi)

Tutorial sui comandi Linux ss per principianti (8 esempi)

Comando awk di Linux con 10 esempi

Tutorial Regex per esempi di Linux (Sed e AWK).

Esercitazione Ping:15 esempi di comandi Ping efficaci

Bash Scripting Introduzione Tutorial con 5 esempi pratici