20 esempi imbarazzanti

20 Awk Examples



Esistono molti strumenti di utilità 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 report utilizzando i comandi awk, grep e sed. awk non è solo un comando. È un linguaggio di scripting che può essere utilizzato sia dal terminale che dal file awk. Supporta la variabile, l'istruzione condizionale, l'array, i loop ecc. Come altri linguaggi di scripting. Può leggere qualsiasi contenuto di file riga per riga e separare i campi o le colonne in base a un delimitatore specifico. Supporta anche l'espressione regolare per la ricerca di stringhe particolari nel contenuto di testo o nel file e intraprende azioni se viene trovata una corrispondenza. Come puoi usare il comando e lo script awk è mostrato in questo tutorial usando 20 esempi utili.

Contenuti:

  1. awk con printf
  2. imbarazzante dividere su uno spazio bianco
  3. awk per cambiare il delimitatore
  4. awk con dati delimitati da tabulazioni
  5. awk con dati CSV
  6. regex imbarazzante
  7. regex insensibile alle maiuscole e minuscole
  8. awk con nf (numero di campi) variabile
  9. awk gensub() funzione
  10. awk con la funzione rand()
  11. awk funzione definita dall'utente
  12. imbarazzante se
  13. variabili awk
  14. array awk
  15. ciclo imbarazzante
  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

Usare awk con printf

printf() viene utilizzata per formattare qualsiasi output nella maggior parte dei linguaggi di programmazione. Questa funzione può essere utilizzata con awk comando per generare diversi tipi di output formattati. comando awk utilizzato principalmente per qualsiasi file di testo. Crea un file di testo chiamato dipendente.txt con il contenuto indicato di seguito in cui i campi sono separati da tab (' ').







dipendente.txt



1001 Giovanni 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 stampa il primo file dopo la formattazione. Qui, %10s significa che l'output sarà lungo 10 caratteri. Se il valore dell'output è inferiore a 10 caratteri, gli spazi verranno aggiunti all'inizio del valore.



$ awk'{ printf '%10s ', $ 1}'dipendente.testo

Produzione:





Vai ai contenuti



imbarazzante dividere su uno spazio bianco

Il separatore di parole o di campo predefinito per dividere qualsiasi testo è lo spazio vuoto. Il comando awk può accettare un valore di testo come input in vari modi. Il testo di input viene passato da buttato fuori comando nel seguente esempio. Il testo, ' mi piace programmare ' sarà diviso per separatore predefinito, spazio e la terza parola verrà stampata come output.

$buttato fuori 'Mi piace programmare' | awk '{ stampa $3 }'

Produzione:

Vai ai contenuti

awk per cambiare il delimitatore

Il comando awk può essere utilizzato per modificare il delimitatore per qualsiasi contenuto di file. Supponiamo di avere un file di testo chiamato telefono.txt con il seguente contenuto dove ':' è usato 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 .

$ cat phone.txt
$ awk '$1=$1' FS=':' OFS='-' phone.txt

Produzione:

Vai ai contenuti

awk con dati delimitati da tabulazioni

Il comando awk ha molte variabili integrate che vengono utilizzate per leggere il testo in modi diversi. Due di loro sono FS e OFS . FS è il separatore del campo di input e OFS sono le variabili del separatore del campo di output. Gli usi di queste variabili sono mostrati in questa sezione. Creare un tab file separato denominato input.txt con il seguente contenuto per testare gli usi di FS e OFS variabili.

Input.txt

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

Utilizzo della variabile FS con tab

Il seguente comando dividerà ogni riga di input.txt file in base alla scheda (' ') e stampare il primo campo di ogni riga.

$awk '{ stampa $1 }' FS='T'input.txt

Produzione:

Utilizzo della variabile OFS con tab

Il seguente comando awk stamperà il 9ns e 5ns campi di 'Ls -l' output del comando con separatore di tabulazione dopo aver stampato il titolo della colonna Nome e Taglia . Qui, OFS variabile viene utilizzata per formattare l'output da una scheda.

$ls -l
$ls -l | awk -v OFS='T' 'BEGIN { printf '%s %s ', 'Nome', 'Dimensione'} {print $9,$5}'

Produzione:

Vai ai contenuti

awk con 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 protetta] , (862) 478-7263
2, Amelia, [email protetta], (530) 764-8000
3, Emma, ​​[e-mail protetta] , (542) 986-2390

Lettura di un singolo campo del file CSV

'-F' L'opzione è usata con il comando awk per impostare il delimitatore per dividere ogni riga del file. Il seguente comando awk stamperà il nome campo di il cliente.csv file.

$gattocliente.csv
$awk -F ',' '{stampa $2}'cliente.csv

Produzione:

Leggere più campi combinando con altro testo

Il seguente comando stamperà tre campi di cliente.csv combinando il testo del titolo, Nome, email e telefono . La prima riga del cliente.csv file contiene il titolo di ogni campo. NO variabile contiene il numero di riga del file quando il comando awk analizza il file. In questo esempio, il NR variabile viene utilizzata per omettere la prima riga del file. L'output mostrerà il 2ns, 3rde 4nscampi di tutte le righe eccetto la prima riga.

$awk -F ',' 'NR>1 {print 'Nome:' $2 ', Email:' $3 ', Telefono:' $4}'cliente.csv

Produzione:

Lettura di file CSV utilizzando uno script awk

Lo script awk può essere eseguito eseguendo il file awk. Come è possibile creare un file awk ed eseguire il file è mostrato in questo esempio. Crea un file chiamato awkcsv.awk con il seguente codice. INIZIO la parola chiave è usata nello script per informare il comando awk di eseguire lo script del INIZIO parte prima di eseguire altre attività. Qui, separatore di campo ( FS ) viene utilizzato per definire il delimitatore di divisione e 2nse 1nsi campi verranno stampati in base al formato utilizzato nella funzione printf().

awkcsv.awk
INIZIO{FS= ','} { printf '% 5s (%s) ',$2,$1}

Correre awkcsv.awk file con il contenuto di il cliente.csv file con il seguente comando.

$awk -Fawkcsv.awk cliente.csv

Produzione:

Vai ai contenuti

regex imbarazzante

L'espressione regolare è un modello utilizzato per cercare qualsiasi stringa in un testo. Diversi tipi di complicate attività di ricerca e sostituzione possono essere eseguite molto facilmente utilizzando l'espressione regolare. Alcuni semplici usi dell'espressione regolare con il comando awk sono mostrati in questa sezione.

Personaggio corrispondenteset

Il seguente comando corrisponderà alla parola Sciocco o bool o Freddo con la stringa di input e stampa se la parola trova. Qui, Bambola non corrisponderà e non verrà stampato.

$printf 'Stolto Freddo Bambola bool' | awk '/[FbC]ool/'

Produzione:

Stringa di ricerca all'inizio della riga

'^' Il simbolo viene utilizzato nell'espressione regolare per cercare qualsiasi modello all'inizio della riga. ' 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 verranno mostrate nell'output.

$buttato fuori -e 'Linux è gratuito' È un software open source LinuxHint è
un popolare sito blog'
| awk '/^Linux/'

Produzione:

Ricerca stringa alla fine della riga

'$' simbolo viene utilizzato nell'espressione regolare per cercare qualsiasi motivo alla fine di ogni riga del testo. ' sceneggiatura ' La parola viene cercata nell'esempio seguente. Qui, due righe contengono la parola, sceneggiatura alla fine della linea.

$buttato fuori -e 'Script PHP' JavaScript Programmazione visiva' | awk '/Script$/'

Produzione:

Ricerca omettendo un particolare set di caratteri

'^' il simbolo indica l'inizio del testo quando viene utilizzato davanti a qualsiasi schema di corde ('/^... /') o prima di qualsiasi set di caratteri dichiarato da ^ […] . Se la '^' viene utilizzato il simbolo all'interno della terza parentesi, [^…] quindi il set di caratteri definito all'interno della parentesi verrà omesso al momento della ricerca. Il seguente comando cercherà qualsiasi parola che non inizi con 'F' ma termina con ' ool '. Freddo e bool verrà stampato in base al motivo e ai dati di testo.

$ printf 'Stolto Freddo Bambola bool' |awk'/ [^ F] ool /'

Produzione:

Vai ai contenuti

regex insensibile alle maiuscole e minuscole

Per impostazione predefinita, l'espressione regolare esegue la ricerca con distinzione tra maiuscole e minuscole durante la ricerca di qualsiasi pattern nella stringa. La ricerca senza distinzione tra maiuscole e minuscole può essere eseguita con il comando awk con l'espressione regolare. Nel seguente esempio, ridurre() la funzione viene utilizzata per eseguire ricerche senza distinzione tra maiuscole e minuscole. Qui, la prima parola di ogni riga del testo di input verrà convertita in minuscolo usando ridurre() funzione e corrisponde al modello di espressione regolare. toupper() la funzione può essere utilizzata anche per questo scopo, in questo caso, il modello deve essere definito da tutte lettere maiuscole. Il testo definito nell'esempio seguente contiene la parola di ricerca, 'Ragnatela ' in due righe che verranno stampate come output.

$buttato fuori -e 'Web design sviluppo web Struttura' | awk 'tolow($0) ~ /^web/;'

Produzione:

Vai ai contenuti

awk con variabile NF (numero di campi)

NF è una variabile incorporata del comando awk che viene utilizzata per contare il numero totale di campi in ogni riga del testo di input. Crea qualsiasi file di testo con più righe e più parole. l'input.txt qui viene utilizzato il file creato nell'esempio precedente.

Utilizzo di NF dalla riga di comando

Qui, il primo comando viene utilizzato per visualizzare il contenuto di input.txt file e il secondo comando viene utilizzato per mostrare il numero totale di campi in ogni riga del file utilizzando NF variabile.

$ cat input.txt
$ awk '{print NF}' input.txt

Produzione:

Utilizzo di NF nel file awk

Crea un file awk chiamato conta.awk con lo script riportato di seguito. Quando questo script verrà eseguito con qualsiasi dato di testo, ogni contenuto di riga con i campi totali verrà stampato come output.

conta.awk

{stampa $0}
{Stampa'[Totale campi:'NF']'}

Esegui lo script con il seguente comando.

$awk -Fcount.awk input.txt

Produzione:

Vai ai contenuti

awk gensub() funzione

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

Sintassi:

gensub(regexp, sostituzione, come[, obbiettivo])

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

$ sudo apt-get install gawk

Crea un file di testo chiamato ' infovendite.txt ' con il seguente contenuto per mettere in pratica questo esempio. Qui, i campi sono separati da una scheda.

infovendite.txt

il mio 700000
Tue 800000
mer 750000
Raccogli 200000
ven 430000
Sab 820000

Eseguire il seguente comando per leggere i campi numerici del infovendite.txt archiviare e stampare il totale di tutte le vendite. Qui, il terzo parametro, 'G' indica la ricerca globale. Ciò significa che il modello verrà cercato nell'intero contenuto del file.

$awk '{ x=gensub(' ','','G',$2); printf x '+' } END{ print 0 }'infovendite.txt| avanti Cristo -l

Produzione:

Vai ai contenuti

awk con la funzione rand()

riga() viene utilizzata per generare qualsiasi numero casuale maggiore di 0 e minore di 1. Quindi, genererà sempre un numero frazionario minore di 1. Il comando seguente genererà un numero casuale frazionario e moltiplicherà il valore con 10 per ottenere un numero maggiore di 1. Verrà stampato un numero frazionario con due cifre dopo la virgola decimale per l'applicazione della funzione printf(). Se esegui più volte il seguente comando, otterrai un output diverso ogni volta.

$awk 'BEGIN {printf 'Il numero è =%.2f ' ​​, rand()*10}'

Produzione:

Vai ai contenuti

awk funzione definita dall'utente

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 compito particolare. Supponiamo di voler creare una funzione personalizzata per calcolare l'area di un rettangolo. Per eseguire questa operazione, creare un file denominato ' area.awk ' con il seguente script. In questo esempio, una funzione definita dall'utente denominata la zona() viene dichiarato nello script che calcola l'area in base ai parametri di input e restituisce il valore dell'area. getline comando viene utilizzato qui per ricevere input dall'utente.

area.awk

# Calcola area
funzionela zona(altezza,larghezza){
Restituzionealtezza*larghezza
}

# Avvia l'esecuzione
INIZIO{
Stampa'Inserisci il valore dell'altezza:'
getline h< '-'
Stampa'Inserisci il valore della larghezza:'
getline w< '-'
Stampa'Area = 'la zona(h,in)
}

Esegui lo script.

$awk -Farea.awk

Produzione:

Vai ai contenuti

awk se esempio

awk supporta le istruzioni condizionali come altri linguaggi di programmazione standard. In questa sezione vengono mostrati tre tipi di istruzioni if ​​utilizzando tre esempi. Crea un file di testo chiamato articoli.txt con il seguente contenuto.

articoli.txt

HDD Samsung $ 100
Mouse A4Tech
Stampante HP $ 200

Semplice se esempio :

il seguente comando leggerà il contenuto del articoli.txt file e controllare il 3rd valore del campo in ogni riga. Se il valore è vuoto, stamperà un messaggio di errore con il numero di riga.

$awk '{ if ($3 == '') print 'Il campo del prezzo è mancante nella riga ' NR }'articoli.txt

Produzione:

esempio if-else:

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

$ awk'{ if ($3 == '') print 'Manca il campo del prezzo'
altrimenti stampa 'il prezzo dell'articolo è ' $3 }'
Oggetti.testo

Produzione:

esempio if-else-if:

Quando il seguente comando verrà eseguito dal terminale, richiederà input dall'utente. Il valore di input verrà confrontato con ciascuna condizione if finché la condizione non sarà vera. Se una qualsiasi condizione diventa vera, stamperà il voto corrispondente. Se il valore di input non corrisponde a nessuna condizione, la stampa avrà esito negativo.

$awk 'BEGIN { print 'Inserisci il segno:'
getline mark<'-'
if (segno >= 90) print 'A+'
else if(mark >= 80) print 'A'
else if(mark >= 70) print 'B+'
altrimenti stampa 'Fallito' }'

Produzione:

Vai ai contenuti

variabili awk

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

Usando una variabile semplice:

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

$awk 'BEGIN{ site='LinuxHint.com'; stampa sito}'

Produzione:

Utilizzo di una variabile per recuperare i dati da un file

Il seguente comando cercherà la parola 'Stampante' nel file articoli.txt . Se una qualsiasi riga del file inizia con 'Stampante ' allora memorizzerà il valore di 1ns , 2ns e 3rd campi in tre variabili. nome e prezzo le variabili verranno stampate.

$ awk'/Stampante/ { nome=$1;marca=$2;prezzo=$3;stampa 'nome oggetto=' nome;
print 'item price=' price }'
Oggetti.testo

Produzione:

Vai ai contenuti

array awk

Sia gli array numerici che quelli associati possono essere usati in awk. La dichiarazione delle variabili di array in awk è la stessa di altri linguaggi di programmazione. Alcuni usi degli array sono mostrati in questa sezione.

Matrice associativa:

L'indice dell'array sarà qualsiasi stringa per l'array associativo. In questo esempio, viene dichiarato e stampato un array associativo di tre elementi.

$awk 'INIZIO {
books['Web Design'] = 'Imparare HTML 5';
books['Programmazione Web'] = 'PHP e MySQL'
books['PHP Framework']='Imparare Laravel 5'
printf '%s %s %s ', books['Web Design'],books['Programmazione Web'],
libri['PHP Framework'] }'

Produzione:

Matrice numerica:

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

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

# stampa gli elementi dell'array
printf 'Valori array: %dT%DT%D ', numero[0],numero[1],numero[2]; }'

Produzione:

Vai ai contenuti

ciclo imbarazzante

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

Mentre il ciclo:

Il ciclo while utilizzato nel comando seguente itererà per 5 volte e uscirà dall'istruzione loop for break.

$ awk 'INIZIA { n = 1; mentre (n 5) si interrompe; stampa n; n++ } }'

Produzione:

Per ciclo:

Il ciclo For utilizzato nel seguente comando awk calcolerà la somma da 1 a 10 e stamperà il valore.

$awk 'INIZIA { somma=0; per (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Produzione:

Ciclo da fare mentre:

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

$awk 'INIZIA {contatore = 10; do { if (counter%2 ==0) print contatore; contatore-- }
mentre (contatore > 5) }'

Produzione:

Vai ai contenuti

awk per stampare la prima colonna

La prima colonna di qualsiasi file può essere stampata usando la variabile $1 in awk. Ma se il valore della prima colonna contiene più parole, viene stampata solo la prima parola della prima colonna. Utilizzando un delimitatore specifico, la prima colonna può essere stampata correttamente. Crea un file di testo chiamato studenti.txt con il seguente contenuto. Qui, la prima colonna contiene il testo di due parole.

Studenti.txt

Kaniz Fatema 30nslotto
Abir Hossain 35nslotto
Giovanni Abramo 40nslotto

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

$awk '{stampa $1}'studenti.txt

Esegui il comando awk con il seguente delimitatore. Verrà stampata l'intera parte della prima colonna.

$awk -F '\ s \ s' '{stampa $1}'studenti.txt

Produzione:

Vai ai contenuti

awk per stampare l'ultima colonna

$(NF) variabile può essere utilizzata per stampare l'ultima colonna di qualsiasi file. I seguenti comandi awk stamperanno l'ultima parte e l'intera parte dell'ultima colonna di gli studenti.txt file.

$awk '{stampa $(NF)}'studenti.txt
$awk -F '\ s \ s' '{stampa $(NF)}'studenti.txt

Produzione:

Vai ai contenuti

awk con grep

grep è un altro utile comando di Linux per cercare contenuto in un file basato su qualsiasi espressione regolare. Il seguente esempio mostra come i comandi awk e grep possono essere usati insieme. presa comando viene utilizzato per cercare informazioni sull'ID dipendente, ' 1002 ' a partire dal l'impiegato.txt file. L'output del comando grep verrà inviato ad awk come dati di input. Il bonus del 5% verrà conteggiato e stampato in base allo stipendio del dipendente id, ' 1002' tramite comando awk.

$gattodipendente.txt
$presa '1002'dipendente.txt| awk -F 'T' '{ print $2 ' otterrà $' ($3*5)/100 ' bonus'}'

Produzione:

Vai ai contenuti

awk con file BASH

Come altri comandi Linux, anche il comando awk può essere utilizzato in uno script BASH. Crea un file di testo chiamato clienti.txt con il seguente contenuto. Ogni riga di questo file contiene informazioni su quattro campi. Questi sono l'ID del cliente, il nome, l'indirizzo e il numero di cellulare che sono separati da '/ '.

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 chiamato item_search.bash con il seguente script. Secondo questo script, il valore dello stato sarà preso dall'utente e cercato in i clienti.txt file per presa comando e passato al comando awk come input. Il comando Awk leggerà 2ns e 4ns campi di ogni riga. Se il valore di input corrisponde a qualsiasi valore di stato di clienti.txt file quindi stamperà quello del cliente nome e numero di cellulare , altrimenti stamperà il messaggio Nessun cliente trovato .

item_search.bash

#!/bin/bash
buttato fuori 'Inserisci il nome dello stato:'
leggerestato
clienti=``presa '$stato'clienti.txt| awk -F '/' '{print 'Nome cliente:' $2, ',
N. cellulare:' $4}'
``
Se [ '$clienti' !='' ];poi
buttato fuori $clienti
altro
buttato fuori 'Nessun cliente trovato'
essere

Eseguire i seguenti comandi per mostrare gli output.

$gattoclienti.txt
$bashitem_search.bash

Produzione:

Vai ai contenuti

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. L'esempio seguente mostra l'uso del comando awk con sed comando. Qui, il comando sed cercherà tutti i nomi dei dipendenti che iniziano con ' J ' e passa al comando awk come input. awk stamperà dipendente nome e ID dopo la formattazione.

$gattodipendente.txt
$sed -n '/J/p'dipendente.txt| awk -F 'T' '{ printf '%s(%s) ', $2, $1 }'

Produzione:

Vai ai contenuti

Conclusione:

È possibile utilizzare il comando awk per creare diversi tipi di report basati su 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.