
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
- Awk legge i file di input una riga alla volta.
- Per ogni riga, corrisponde a un dato modello nell'ordine indicato, se corrisponde a eseguire l'azione corrispondente.
- Se nessun modello corrisponde, non verrà eseguita alcuna azione.
- Nella sintassi sopra, il pattern di ricerca o l'azione sono facoltativi, ma non entrambi.
- Se il modello di ricerca non viene fornito, Awk esegue le azioni indicate per ciascuna riga dell'input.
- Se l'azione non viene fornita, stampa tutte le righe che corrispondono ai modelli indicati, che è l'azione predefinita.
- Le parentesi graffe vuote senza alcuna azione non fanno nulla. Non eseguirà l'operazione di stampa predefinita.
- 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