Awk

20 esempi imbarazzanti

20 esempi imbarazzanti

20 esempi imbarazzanti

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() la funzione 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 dove i campi sono separati da tab ('\t').

dipendente.TXT

1001 Giovanni sena 40000
1002 Jafar Iqbal   60000
1003 Meher Nigar   30000
1004 Jonny Liver   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\n” 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\n", $1 ' dipendente.TXT

Produzione:

Vai ai contenuti

imbarazzante dividere su uno spazio bianco

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

$ echo 'Mi piace programmare' | awk ' stampa $3 '

Produzione:

Vai ai contenuti

awk per cambiare il delimitatore

Il comando awk può essere usato per cambiare 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 cambiare il delimitatore, ':' di '-' al contenuto del file, Telefono.TXT.

$ gatto telefono.TXT
$ awk '$1=$1' FS=":" OFS="-" telefono.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 è variabile separatore di campo di output. Gli usi di queste variabili sono mostrati in questa sezione. Creare un tab file separato denominato ingresso.TXT con il seguente contenuto per testare gli usi di FS e OFS variabili.

Ingresso.TXT

Lato client: linguaggio di scripting
Lato server   linguaggio di scripting
Server di database
Server web

Utilizzo della variabile FS con tab

Il seguente comando dividerà ogni riga di ingresso.TXT file basato sulla scheda ('\t') e stampa il primo campo di ogni riga.

$ awk ' print $1 ' FS='\t' input.TXT

Produzione:

Utilizzo della variabile OFS con tab

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

$ ls -l
$ ls -l | awk -v OFS='\t' 'BEGIN printf "%s\t%s\n", "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 usando il comando awk. Crea un file CSV denominato 'cliente.csv' con il seguente contenuto per applicare il comando awk.

cliente.TXT

ID, nome, e-mail, telefono
1, Sophia, [e-mail 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 viene utilizzata 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.

$ gatto cliente.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 il file contiene il titolo di ogni campo. NR 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 4questo campi di tutte le righe tranne 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 puoi 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 2nd e 1sto i campi verranno stampati in base al formato utilizzato nella funzione printf().

awkcsv.awk
INIZIA FS = "," printf "%5s(%s)\n", $2,$1

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

$ awk -f awkcsv.cliente imbarazzante.csv

Produzione:

Vai ai contenuti

regex imbarazzante

L'espressione regolare è un modello che viene 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.

Set di caratteri corrispondenti

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 stamperà.

$ printf "Fool\nCool\nBambola\nbool" | 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 quelle due righe verranno mostrate nell'output.

$ echo -e "Linux è gratuito\n È un software open-source\nLinuxHint è
un popolare sito di blog" | awk '/^Linux/'

Produzione:

Ricerca stringa alla fine della riga

'$' il 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.

$ echo -e "Script PHP\nJavaScript\nProgrammazione 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 '^' il simbolo viene utilizzato 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 modello e ai dati di testo.

$ printf "Fool\nCool\nBambola\nbool" | 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 modello 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 corrispondenza con il 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.

$ echo -e "Web Design\nsviluppo web\nFramework" | awk 'tolower($0) ~ /^web/;'

Produzione:

Vai ai contenuti

awk con variabile NF (numero di campi)

NF èuna variabile incorporata del comando awk cheèusata 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'ingresso.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 ingresso.TXT file e il secondo comando viene utilizzato per mostrare il numero totale di campi in ogni riga del file utilizzando NF variabile.

$ ingresso gatto.TXT
$ awk 'print NF' input.TXT

Produzione:

Utilizzo di NF nel file awk

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

contare.awk

stampa $0
print "[Totale campi:" NF "]"

Esegui lo script con il seguente comando.

$ awk -f conteggio.input imbarazzante.TXT

Produzione:

Vai ai contenuti

awk gensub() funzione

getsub() è una funzione di sostituzione che viene utilizzata per cercare stringhe in base a un particolare delimitatore o 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 [, target])

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 'informazioni sulle vendite.TXT' con il seguente contenuto per mettere in pratica questo esempio. Qui, i campi sono separati da una scheda.

informazioni sulle vendite.TXT

lun  700000
mar       800000
mer  750000
gio       200000
ven 430000
Sab  820000

Eseguire il seguente comando per leggere i campi numerici del of informazioni sulle vendite.TXT archivia e stampa 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("\t","","G",$2); printf x "+" END print 0 ' info vendite.txt | bc -l

Produzione:

Vai ai contenuti

awk con la funzione rand()

rand() la funzione viene utilizzata per generare qualsiasi numero casuale maggiore di 0 e minore 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 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\n" , 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 fare qualsiasi compito particolare.  Supponiamo di voler creare una funzione personalizzata per calcolare l'area di un rettangolo. Per eseguire 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 ricevere input dall'utente.

la zona.awk

# Calcola area
area della funzione (altezza, larghezza)
ritorno altezza*larghezza

# Avvia l'esecuzione
INIZIO
print "Inserisci il valore dell'altezza:"
getline h < "-"
print "Inserisci il valore della larghezza:"
getline w < "-"
print "Area = " area(h,w)

Esegui lo script.

$ awk -f area.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 elementi.TXT con il seguente contenuto.

elementi.TXT

HDD Samsung   $ 100
Mouse A4Tech
Stampante   HP   $ 200

Semplice se esempio:

il seguente comando leggerà il contenuto del elementi.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 '  elementi.TXT

Produzione:

esempio if-else:

Il seguente comando stamperà il prezzo dell'articolo se il 3rd esiste 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 '  articoli.TXT

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 è vera is. Se una qualsiasi condizione diventa vera, stamperà il voto corrispondente. Se il valore di input non corrisponde a nessuna condizione, verrà stampato con esito negativo.

$ awk 'BEGIN print "Inserisci il segno:"
getline mark get <  "-"
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 'luogo' e un valore stringa è assegnato a quella variabile. 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 elementi.TXT. Se una qualsiasi riga del file inizia con 'Stampante' allora memorizzerà il valore di 1sto, 2nd e 3rd campi in tre variabili. nome e prezzo le variabili verranno stampate.

$ awk '/Stampante/ nome=$1;marca=$2;prezzo=$3;print "nome oggetto=" nome;
stampa "prezzo articolo=" prezzo ' articoli.TXT

Produzione:

Vai ai contenuti

array awk

Sia gli array numerici che quelli associati possono essere usati in awk. La dichiarazione della variabile 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 'INIZIA
books["Web Design"] = "Imparare HTML 5";
books["Programmazione Web"] = "PHP e MySQL"
libri["PHP Framework"]="Imparare Laravel 5"
printf "%s\n%s\n%s\n", libri["Web Design"],libri["Programmazione web"],
libri["Framework PHP"] '

Produzione:

Matrice numerica:

Un array numerico di tre elementi viene dichiarato e stampato separando tab.

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

# stampa gli elementi dell'array
printf  "Valori array: %d\t%d\t%d\n", 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 itera per 5 volte e uscirà dal ciclo per l'istruzione break.

$  awk 'BEGIN n = 1; mentre (n <= 10) if(n > 5) rottura; stampa n; n++ '

Produzione:

Per ciclo:

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

$ awk 'BEGIN 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 'BEGIN contatore = 10; do if (counter%2 ==0) print contatore; contro--
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       30questo lotto
Abir Hossain       35questo lotto
John Abraham       40questo lotto

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

$ awk 'print $1' studenti.TXT

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

$ awk -F '\\s\\s' 'print $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 'print $(NF)' studenti.TXT
$ awk -F '\\s\\s' 'print $(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. L'esempio seguente mostra come i comandi awk e grep possono essere usati insieme. grep comando viene utilizzato per cercare informazioni sull'ID dipendente, '1002' a partire dal 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 del dipendente id, '1002' dal comando awkk.

$ cat dipendente.TXT
$ grep '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 articolo_ricerca.bash con il seguente script. Secondo questo script, il valore dello stato verrà preso dall'utente e cercato in i clienti.TXT file per grep comando e passato al comando awk come input. Il comando Awk leggerà 2nd e 4questo campi di ogni riga. Se il valore di input corrisponde a qualsiasi valore di stato di clienti.TXT file quindi stamperà quello del cliente customer nome e numero di cellulare, in caso contrario, stamperà il messaggio “Nessun cliente trovato".

articolo_ricerca.bash

#!/bin/bash
echo "Inserisci il nome dello stato:"
leggi lo stato
clienti='grep "$stato" clienti.txt | awk -F "/" 'print "Nome cliente:" $2, ",
N. cellulare:" $4''
if [ "$clienti" != "" ]; poi
echo $clienti
altro
echo "Nessun cliente trovato"
fi

Esegui i seguenti comandi per mostrare gli output.

$ clienti gatto.TXT
$ bash item_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 cercare che per sostituire il 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.

$ dipendente gatto.TXT
$ sed -n '/J/p' impiegato.txt | awk -F '\t' ' printf "%s(%s)\n", $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.

Come cambiare i pulsanti sinistro e destro del mouse su PC Windows 10
È abbastanza normale che tutti i mouse dei computer siano progettati ergonomicamente per gli utenti destrimani. Ma sono disponibili dispositivi mouse ...
Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...
Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...