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:
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 40000Il 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'.TXTProduzione:
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: 778Esegui il seguente comando awk per modificare il delimitatore, ':' di '-' al contenuto del file, telefono.TXT.
$ gatto telefono.TXTProduzione:
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 clientIl 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:
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, telefonoLeggendo 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:
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:
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.AwkCorrere 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:
'^' 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:
'$' 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:
'^' 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.TXTProduzione:
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 $ 0Esegui 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 GawkCrea 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 700000Eseguire 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 areaEsegui 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 $ 100Semplice 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:
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"Produzione:
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.
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:
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;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.
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:
Una matrice numerica di tre elementi viene dichiarata e stampata separando la scheda.
$ awk 'inizioProduzione:
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 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 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:
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 lottoEsegui 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-7942Crea 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".
#!/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
È 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.