Top 10 esempi Awk

Top 10 esempi Awk

20 esempi AWK

Molti strumenti di utilità esistono nel sistema operativo Linux per cercare e generare un report da dati di testo o file. L'utente può facilmente eseguire molti tipi di attività di ricerca, sostituzione e generazione di segnalazioni utilizzando comandi AWK, GREP e SED. Awk non è solo un comando. È un linguaggio di scripting che può essere utilizzato sia dal file terminale che da awk. Supporta la variabile, l'istruzione condizionale, l'array, i loop ecc. Come altre lingue di scripting. Può leggere qualsiasi file di contenuto del file per riga e separare i campi o le colonne in base a un delimitatore specifico. Supporta anche un'espressione regolare per la ricerca di una particolare stringa nel contenuto o nel file di testo e intraprende azioni se una corrispondenza è stata fondata. Come è possibile utilizzare il comando e lo script awk è mostrato in questo tutorial utilizzando 20 esempi utili.

Contenuti:

  1. awk con printf
  2. Awk per dividere su spazio bianco
  3. awk per cambiare il delimitatore
  4. Awk con dati delimitati da tab
  5. AWK con i dati CSV
  6. Awk Regex
  7. REGEX insensibile del caso Awk
  8. Awk con variabile NF (numero di campi)
  9. funzione awk gensub ()
  10. awk con la funzione rand ()
  11. Funzione definita dall'utente AWK
  12. awk se
  13. Variabili AWK
  14. array awk
  15. Awk Loop
  16. Awk per stampare la prima colonna
  17. Awk per stampare l'ultima colonna
  18. Awk con grep
  19. Awk con il file di script bash
  20. awk con sed

Usando AWK con printf

printf () La funzione viene utilizzata per formattare qualsiasi output nella maggior parte dei linguaggi di programmazione. Questa funzione può essere utilizzata con Awk comanda per generare diversi tipi di uscite formattate. comando awk utilizzato principalmente per qualsiasi file di testo. Crea un file di testo denominato dipendente.TXT con il contenuto indicato di seguito dove i campi sono separati da tab ('\ t').

dipendente.TXT

1001 John Sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny fegato 70000

Il seguente comando AWK leggerà i dati da dipendente.TXT File riga per riga e stampare il primo archiviato dopo la formattazione. Qui, "%10s \ n"Significa che l'output sarà lungo 10 caratteri. Se il valore dell'uscita è inferiore a 10 caratteri, gli spazi verranno aggiunti nella parte anteriore del valore.

$ awk 'printf "%10s \ n", $ 1'.TXT

Produzione:

Vai al contenuto

Awk per dividere su spazio bianco

La parola predefinita o il separatore di campo per la divisione di qualsiasi testo è lo spazio bianco. Il comando awk può prendere il valore di testo come input in vari modi. Il testo di input viene passato da eco comando nell'esempio seguente. Il testo, 'Mi piace la programmazione'sarà diviso per impostazione predefinita, spazio, e la terza parola verrà stampata come output.

$ echo 'Mi piace la programmazione' | awk 'stampa $ 3'

Produzione:

Vai al contenuto

awk per cambiare il delimitatore

Il comando AWK può essere utilizzato per modificare il delimitatore per qualsiasi contenuto di file. Supponiamo che tu abbia un file di testo chiamato telefono.TXT con il seguente contenuto in cui ":" viene utilizzato come separatore di campo del contenuto del file.

telefono.TXT

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Esegui il seguente comando awk per modificare il delimitatore, ':' di '-' al contenuto del file, telefono.TXT.

$ gatto telefono.TXT
$ awk '$ 1 = $ 1' fs = ":" ofs = "-" telefono.TXT

Produzione:

Vai al contenuto

Awk con dati delimitati da tab

Il comando AWK ha molte variabili integrate che vengono utilizzate per leggere il testo in diversi modi. Due di loro lo sono Fs E Dis. Fs è separatore di campo di input e Dis è variabile separatore di campo di output. Gli usi di queste variabili sono mostrati in questa sezione. Creare un scheda file separato denominato ingresso.TXT con i seguenti contenuti per testare gli usi di Fs E Dis variabili.

Ingresso.TXT

Linguaggio di scripting sul lato client
Linguaggio di scripting lato server
Server di database
Server web

Utilizzo della variabile FS con scheda

Il comando seguente dividerà ogni riga di ingresso.TXT File in base alla scheda ('\ t') e stampa il primo campo di ogni riga.

$ awk 'stampa $ 1' fs = '\ t' Input.TXT

Produzione:

Usando la variabile OFS con tab

Il seguente comando AWK stamperà il 9th E 5th campi di 'ls -l' Output del comando con separatore di scheda dopo aver stampato il titolo della colonna "Nome" E "Misurare". Qui, Dis La variabile viene utilizzata per formattare l'output per una scheda.

$ ls -l
$ ls -l | awk -v dis = '\ t' 'inizio printf "%s \ t%s \ n", "nome", "dimensione" stampa $ 9, $ 5'

Produzione:

Vai al contenuto

AWK con i dati CSV

Il contenuto di qualsiasi file CSV può essere analizzato in più modi utilizzando il comando AWK. Crea un file CSV chiamato 'cliente.CSV'Con il seguente contenuto per applicare il comando AWK.

cliente.TXT

ID, nome, e -mail, telefono
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, ​​[email protected], (542) 986-2390

Leggendo il campo singolo del file CSV

'-F' l'opzione viene utilizzata con comando AWK per impostare il delimitatore per la divisione di ogni riga del file. Il seguente comando AWK stamperà il nome campo di il cliente.CSV file.

$ gatto cliente.CSV
$ awk -f "," 'print $ 2' Cliente.CSV

Produzione:

Leggendo più campi combinando con altri testi

Il seguente comando stamperà tre campi di cliente.CSV Combinando il testo del titolo, Nome, e -mail e telefono. La prima riga del cliente.CSV Il file contiene il titolo di ogni campo. Nr La variabile contiene il numero di riga del file quando il comando awk analizza il file. In questo esempio, il nr La variabile viene utilizzata per omettere la prima riga del file. L'output mostrerà il 2nd, 3Rd e 4th campi di tutte le linee tranne la prima riga.

$ awk -f "," 'nr> 1 print "Nome:" $ 2 ", e -mail:" $ 3 ", telefono:" $ 4' Cliente.CSV

Produzione:

Leggendo il file CSV usando uno script AWK

Lo script AWK può essere eseguito eseguendo il file AWK. Come è possibile creare file awk ed eseguire il file viene mostrato in questo esempio. Crea un file denominato awkcsv.Awk con il seguente codice. INIZIO La parola chiave viene utilizzata nello script per informare il comando awk per eseguire lo script di INIZIO parte prima di eseguire altre attività. Qui, separatore di campo (Fs) viene utilizzato per definire il delimitatore di scissione e 2nd e 1st I campi verranno stampati in base al formato utilizzato nella funzione printf ().

awkcsv.Awk
Inizio fs = "," printf "%5s (%s) \ n", $ 2, $ 1

Correre awkcsv.Awk file con il contenuto di il cliente.CSV File dal seguente comando.

$ awk -f awkcsv.Cliente AWK.CSV

Produzione:

Vai al contenuto

Awk Regex

L'espressione regolare è uno schema che viene utilizzato per cercare qualsiasi stringa in un testo. Diversi tipi di ricerche complicate e di sostituzione di attività possono essere eseguiti molto facilmente usando l'espressione regolare. In questa sezione sono mostrati alcuni semplici usi dell'espressione regolare con comando AWK.

Set di caratteri corrispondenti

Il comando seguente corrisponderà alla parola Sciocco o bool O Freddo con la stringa di input e stampare se la parola fonda. Qui, Bambola non corrisponderà e non stampino.

$ printf "food \ ncool \ ndoll \ nbool" | awk '/[fbc] ool/'

Produzione:

Cerca stringa all'inizio della riga

'^' Il simbolo viene usato nell'espressione regolare per cercare qualsiasi modello all'inizio della linea. 'Linux ' La parola verrà cercata all'inizio di ogni riga del testo nell'esempio seguente. Qui, due righe iniziano con il testo, 'Linux'E queste due righe saranno mostrate nell'output.

$ echo -e "Linux è libero di utilizzare \ n è un software open source \ nlinuxhint è
Un sito di blog popolare "| Awk '/^Linux/'

Produzione:

Cerca stringa alla fine della riga

'$' Il simbolo viene usato nell'espressione regolare per cercare qualsiasi modello alla fine di ogni riga del testo. 'Sceneggiatura'La parola è certi nel seguente esempio. Qui, due righe contengono la parola, Sceneggiatura Alla fine della linea.

$ echo -e "script php \ njavascript \ nvisual Programming" | awk '/script $/'

Produzione:

Cerca omettendo un particolare set di caratteri

'^' il simbolo indica l'avvio del testo quando viene utilizzato davanti a qualsiasi schema di stringa (' /^… /') o prima di qualsiasi set di personaggi dichiarato da ^[…]. Se la '^' Il simbolo viene usato all'interno della terza fascia, [^…] Quindi il personaggio definito set all'interno della staffa verrà omesso al momento della ricerca. Il comando seguente cercherà qualsiasi parola che non inizia con 'F' ma finire con 'ool'. Freddo E bool verrà stampato in base ai dati di pattern e testo.

$ printf "food \ ncool \ ndoll \ nbool" | awk '/[^f] ool/'

Produzione:

Vai al contenuto

REGEX insensibile del caso Awk

Per impostazione predefinita, l'espressione regolare esegue una ricerca sensibile al caso durante la ricerca di qualsiasi modello nella stringa. La ricerca insensibile al caso può essere effettuata dal comando awk con l'espressione regolare. Nel seguente esempio, ridurre() La funzione viene utilizzata per fare una ricerca insensibile al caso. Qui, la prima parola di ogni riga del testo di input verrà convertita in minuscolo utilizzando ridurre() Funzionare e abbinare con il modello di espressione regolare. toupper () La funzione può anche essere utilizzata per questo scopo, in questo caso, il modello deve essere definito da tutte le lettera di capitale. Il testo definito nell'esempio seguente contiene la parola di ricerca, 'ragnatela'In due righe che verranno stampate come output.

$ echo -e "web design \ nWeb Development \ nFramework" | awk 'tolower ($ 0) ~ /^web /;'

Produzione:

Vai al contenuto

Awk con variabile NF (numero di campi)

Nf è una variabile integrata di comando AWK che viene utilizzato per contare il numero totale di campi in ciascuna riga del testo di input. Crea qualsiasi file di testo con più righe e più parole. l'input.TXT Il file viene utilizzato qui che viene creato nell'esempio precedente.

Usando NF dalla riga di comando

Qui, il primo comando viene utilizzato per visualizzare il contenuto di ingresso.TXT Il file e il secondo comando vengono utilizzati per mostrare il numero totale di campi in ciascuna riga del file utilizzando Nf variabile.

$ cat input.TXT
$ awk 'print nf' Input.TXT

Produzione:

Usando NF nel file AWK

Crea un file AWK chiamato contare.Awk con lo script indicato di seguito. Quando questo script verrà eseguito con qualsiasi dati di testo, ogni contenuto di riga con campi totali verrà stampato come output.

contare.Awk

Stampa $ 0
Print "[Total Fields:" Nf "]"

Esegui lo script con il seguente comando.

$ awk -f conta.Input AWK.TXT

Produzione:

Vai al contenuto

funzione awk gensub ()

getsub () è una funzione di sostituzione che viene utilizzata per cercare stringa in base a un particolare delimitatore o di un modello di espressione regolare. Questa funzione è definita in 'Gawk' pacchetto che non è installato per impostazione predefinita. La sintassi per questa funzione è riportata di seguito. Il primo parametro contiene il modello di espressione regolare o la ricerca delimitatore, il secondo parametro contiene il testo di sostituzione, il terzo parametro indica come verrà effettuata la ricerca e l'ultimo parametro contiene il testo in cui questa funzione verrà applicata.

Sintassi:

Gensub (regexp, sostituzione, come [, target])

Esegui il seguente comando da installare Gawk pacchetto per l'utilizzo getsub () funzione con comando awk.

$ sudo apt-get Installa Gawk

Crea un file di testo chiamato 'SalesInfo.TXT'Con i seguenti contenuti per praticare questo esempio. Qui, i campi sono separati da una scheda.

SalesInfo.TXT

Mon 700000
Mar 800000
Mer 750000
Thu 200000
Ven 430000
SAT 820000

Eseguire il comando seguente per leggere i campi numerici del SalesInfo.TXT archiviare e stampare il totale di tutti gli importi delle vendite. Qui, il terzo parametro, 'G' indica la ricerca globale. Ciò significa che il modello verrà cercato nel pieno contenuto del file.

$ awk 'x = Gensub ("\ t", "", "g", $ 2); printf x "+" end print 0 'SalesInfo.txt | BC -L

Produzione:

Vai al contenuto

awk con la funzione rand ()

Rand () La funzione viene utilizzata per generare qualsiasi numero casuale maggiore di 0 e meno di 1. Quindi, genererà sempre un numero frazionario inferiore a 1. Il seguente comando genererà un numero casuale frazionario e moltiplicherà il valore con 10 per ottenere un numero più di 1. Un numero frazionario con due cifre dopo il punto decimale verrà stampato per applicare la funzione printf (). Se si esegue il seguente comando più volte, otterrai un output diverso ogni volta.

$ awk 'inizio printf "numero è =%.2f \ n ", rand ()*10 '

Produzione:

Vai al contenuto

Funzione definita dall'utente AWK

Tutte le funzioni utilizzate negli esempi precedenti sono funzioni integrate. Ma puoi dichiarare una funzione definita dall'utente nel tuo script AWK per svolgere qualsiasi attività particolare. Supponiamo che tu voglia creare una funzione personalizzata per calcolare l'area di un rettangolo. Per fare questa attività, crea un file denominato 'la zona.Awk'Con il seguente script. In questo esempio, una funzione definita dall'utente denominata la zona() è dichiarato nello script che calcola l'area in base ai parametri di input e restituisce il valore dell'area. getline Il comando viene utilizzato qui per prendere input dall'utente.

la zona.Awk

# Calcola area
Area funzione (altezza, larghezza)
Altezza di ritorno*larghezza

# Inizia l'esecuzione
INIZIO
Stampa "Immettere il valore dell'altezza:"
getline h < "-"
Stampa "Immettere il valore della larghezza:"
getline w < "-"
Stampa "area =" area (h, w)

Esegui lo script.

$ awk -f area.Awk

Produzione:

Vai al contenuto

awk se esempio

AWK supporta dichiarazioni condizionali come altri linguaggi di programmazione standard. In questa sezione sono mostrati tre tipi di istruzioni IF. Crea un file di testo denominato elementi.TXT Con i seguenti contenuti.

elementi.TXT

HDD Samsung $ 100
Mouse A4Tech
Stampante HP $ 200

Semplice se esempio:

Se segue il comando leggerà il contenuto del elementi.TXT file e controllare il 3Rd Valore del campo in ogni riga. Se il valore è vuoto, stampa un messaggio di errore con il numero di riga.

$ awk 'if ($ 3 == "") Il campo di prezzo "è mancante in linea" nr' articoli.TXT

Produzione:

Esempio If-Else:

Il seguente comando stamperà il prezzo dell'articolo se il 3Rd Il campo esiste nella riga, altrimenti, stamperà un messaggio di errore.

$ awk 'if ($ 3 == "") PRIMPAGGIO "Il campo dei prezzi manca"
altrimenti stampare "il prezzo dell'articolo è" $ 3 'articoli.TXT

Produzione:

If-Else-if Esempio:

Quando il comando seguente eseguirà dal terminale, prenderà input dall'utente. Il valore di input verrà confrontato con ciascuna condizione se la condizione è vera. Se una condizione diventa vera, allora stamperà il grado corrispondente. Se il valore di input non corrisponde a nessuna condizione, stamperà fallimento.

$ AWK 'INIZIO print "Inserisci il marchio:"
GetLine Mark < "-"
if (mark> = 90) stampa "a+"
else if (mark> = 80) stampa "a"
else if (mark> = 70) Stampa "B+"
altrimenti stampare "fail" '

Produzione:

Vai al contenuto

Variabili AWK

La Dichiarazione della variabile AWK è simile alla Dichiarazione della variabile della shell. C'è una differenza nella lettura del valore della variabile. Il simbolo '$' viene utilizzato con il nome variabile per la variabile shell per leggere il valore. Ma non è necessario utilizzare '$' con la variabile AWK per leggere il valore.

Utilizzando la variabile semplice:

Il seguente comando dichiarerà una variabile denominata 'luogo' e un valore di stringa viene assegnato a quella variabile. Il valore della variabile è stampato nell'istruzione successiva.

$ awk 'inizio site = "linuxhint.com "; sito di stampa '

Produzione:

Utilizzo di una variabile per recuperare i dati da un file

Il seguente comando cercherà la parola 'Stampante' nel file elementi.TXT. Se qualche riga del file inizia con 'Stampante'Quindi memorizzerà il valore di 1st, 2nd E 3Rd campi in tre variabili. nome E prezzo Le variabili verranno stampate.

$ awk '/ stampante/ name = $ 1; brand = $ 2; prezzo = $ 3; stampa "elemento nome =" nome;
Stampa "PREZZA =" Price 'Articoli.TXT

Produzione:

Vai al contenuto

array awk

Le matrici numeriche e associate possono essere utilizzate in AWK. La dichiarazione variabile dell'array in AWK è la stessa di altri linguaggi di programmazione. Alcuni usi degli array sono mostrati in questa sezione.

Array associativo:

L'indice dell'array sarà qualsiasi stringa per l'array associativo. In questo esempio, viene dichiarata e stampata una serie associativa di tre elementi.

$ awk 'inizio
libri ["web design"] = "apprendimento html 5";
libri ["programmazione web"] = "php e mysql"
Libri ["Framework PHP"] = "apprendimento di Laravel 5"
printf "%s \ n%s \ n%s \ n", libri ["web design"], libri ["programmazione web"],
Libri ["Framework PHP"] '

Produzione:

Array numerico:

Una matrice numerica di tre elementi viene dichiarata e stampata separando la scheda.

$ awk 'inizio
numero [0] = 80;
numero [1] = 55;
numero [2] = 76;

# Elementi di array di stampa
printf "valori di array:%d \ t%d \ t%d \ n", numero [0], numero [1], numero [2]; '

Produzione:

Vai al contenuto

Awk Loop

Tre tipi di loop sono supportati da AWK. Gli usi di questi loop sono mostrati qui usando tre esempi.

Mentre loop:

Mentre il ciclo utilizzato nel comando seguente iterirà per 5 volte ed uscirà dal ciclo per la dichiarazione di rottura.

$ awk 'inizio n = 1; mentre (n 5) pausa; Stampa n; n ++ '

Produzione:

Per loop:

Per il ciclo utilizzato nel seguente comando AWK calcolerà la somma da 1 a 10 e stampa il valore.

$ awk 'inizio sum = 0; per (n = 1; n <= 10; n++) sum=sum+n; print sum '

Produzione:

Loop do-while:

Un ciclo do-while del seguente comando stamperà tutti i numeri pari da 10 a 5.

$ awk 'inizio counter = 10; do if (counter%2 == 0) Stampa contatore; contatore--
while (contatore> 5) '

Produzione:

Vai al contenuto

Awk per stampare la prima colonna

La prima colonna di qualsiasi file può essere stampata utilizzando la variabile $ 1 in AWK. Ma se il valore della prima colonna contiene più parole, solo la prima parola della prima colonna stampica. Usando un delimitatore specifico, la prima colonna può essere stampata correttamente. Crea un file di testo denominato studenti.TXT Con i seguenti contenuti. Qui, la prima colonna contiene il testo di due parole.

Studenti.TXT

Kaniz Fatema 30th lotto
Abir Hossain 35th lotto
John Abraham 40th lotto

Esegui comando awk senza delimitatore. Verrà stampata la prima parte della prima colonna.

$ awk 'stampa $ 1' Studenti.TXT

Esegui comando awk con il seguente delimitatore. La parte completa della prima colonna verrà stampata.

$ awk -f '\\ s \\ s' 'stampa $ 1'.TXT

Produzione:

Vai al contenuto

Awk per stampare l'ultima colonna

$ (NF) La variabile può essere utilizzata per stampare l'ultima colonna di qualsiasi file. I seguenti comandi AWK stampano l'ultima parte e la parte completa dell'ultima colonna di Gli studenti.TXT file.

$ awk 'print $ (nf)' Studenti.TXT
$ awk -f '\\ s \\ s' 'print $ (nf)' Studenti.TXT

Produzione:

Vai al contenuto

Awk con grep

Grep è un altro utile comando di Linux per cercare il contenuto in un file basato su qualsiasi espressione regolare. Nel seguente esempio è possibile utilizzare entrambi i comandi Awk e Grep. grep Il comando viene utilizzato per cercare le informazioni dell'ID dipendente, "1002' da il dipendente.TXT file. L'output del comando GREP verrà inviato a AWK come dati di input. Il bonus del 5% verrà conteggiato e stampato in base allo stipendio dell'ID dei dipendenti ",1002 ' di comando awk.

$ cat dipendente.TXT
dipendente $ grep '1002'.txt | awk -f '\ t' 'print $ 2 "otterrà $" ($ 3*5)/100 "bonus"'

Produzione:

Vai al contenuto

Awk con file bash

Come l'altro comando Linux, il comando AWK può essere utilizzato anche in uno script bash. Crea un file di testo denominato clienti.TXT Con i seguenti contenuti. Ogni riga di questo file contiene informazioni su quattro campi. Questi sono ID, nome, indirizzo e numero di cellulare del cliente '/'.

clienti.TXT

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, Vallecito, California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Crea un file bash denominato Item_Search.Bash Con il seguente script. Secondo questo script, il valore statale verrà preso dall'utente e cercato in i clienti.TXT file da grep comando e passato al comando awk come input. Il comando awk leggerà 2nd E 4th campi di ogni riga. Se il valore di input corrisponde a qualsiasi valore di stato di clienti.TXT file quindi stamperà i clienti nome E numero di cellulare, Altrimenti, stamperà il messaggio "Nessun cliente trovato".

Item_Search.Bash

#!/Bin/Bash
echo "Immettere il nome di stato:"
Leggi lo stato
Clienti = "Grep" $ State "Clienti.txt | Awk -f "/" 'print "Nome cliente:" $ 2, ",
NO mobile: "$ 4 ''
Se ["$ clienti" != ""]; Poi
Echo $ clienti
altro
Echo "Nessun cliente trovato"
fi

Esegui i seguenti comandi per mostrare gli output.

Clienti da $ Cat.TXT
$ BASH Item_Search.Bash

Produzione:

Vai al contenuto

awk con sed

Un altro utile strumento di ricerca di Linux è sed. Questo comando può essere utilizzato sia per la ricerca che per la sostituzione del testo di qualsiasi file. Il seguente esempio mostra l'uso del comando awk con sed comando. Qui, il comando sed cercherà tutti i nomi dei dipendenti iniziano con 'J'e passa al comando awk come input. Awk stamperà i dipendenti nome E ID dopo la formattazione.

$ cat dipendente.TXT
$ sed -n '/j/p'.txt | awk -f '\ t' 'printf "%s (%s) \ n", $ 2, $ 1'

Produzione:

Vai al contenuto

Conclusione:

È possibile utilizzare il comando AWK per creare diversi tipi di report in base a eventuali dati tabulari o delimitati dopo aver filtrato i dati correttamente. Spero che sarai in grado di imparare come funziona il comando awk dopo aver praticato gli esempi mostrati in questo tutorial.