GNU/Linux >> Linux Esercitazione >  >> Linux

Comando AWK in Linux con esempi

Introduzione

Il awk command è uno strumento Linux e un linguaggio di programmazione che consente agli utenti di elaborare e manipolare dati e produrre report formattati. Lo strumento supporta varie operazioni per l'elaborazione avanzata del testo e facilita l'espressione di selezioni di dati complesse.

In questo tutorial imparerai cosa è il awk comando fa e come usarlo.

Prerequisiti

  • Un sistema che esegue Linux.
  • Accesso a una finestra del terminale.

Sintassi del comando AWK

La sintassi per awk il comando è:

awk [options] 'selection_criteria {action}' input-file > output-file

Le opzioni disponibili sono:

Opzione Descrizione
-F [separator] Utilizzato per specificare un separatore di file. Il separatore predefinito è uno spazio vuoto.
-f [filename] Utilizzato per specificare il file contenente il awk sceneggiatura. Legge il awk sorgente del programma dal file specificato, invece del primo argomento della riga di comando.
-v Utilizzato per assegnare una variabile.

Come funziona il comando AWK?

Il awk lo scopo principale del comando è quello di effettuare recupero di informazioni e manipolazione del testo facile da eseguire in Linux. Il comando funziona scansionando un insieme di righe di input nell'ordine e ricerca le righe corrispondenti ai modelli specificati dall'utente.

Per ogni modello, gli utenti possono specificare un'azione da eseguire su ogni riga che corrisponde al modello specificato. Pertanto, utilizzando awk , gli utenti possono elaborare facilmente file di registro complessi e generare un report leggibile.

Operazioni AWK

awk consente agli utenti di eseguire varie operazioni su un file o testo di input. Alcune delle operazioni disponibili sono:

  • Scansiona un file riga per riga.
  • Dividi la riga/il file di input in campi.
  • Confronta la riga o i campi di input con i pattern specificati.
  • Esegui varie azioni sulle linee abbinate.
  • Formatta le righe di output.
  • Esegui operazioni aritmetiche e sulle stringhe.
  • Utilizza flusso di controllo e loop in uscita.
  • Trasforma i file ei dati secondo una struttura specifica.
  • Genera rapporti formattati.

Dichiarazioni AWK

Il comando fornisce istruzioni di flusso di controllo di base (if-else , while , for , break ) e consente inoltre agli utenti di raggruppare le istruzioni utilizzando le parentesi graffe {} .

  • se-altro

Il if-else funziona valutando la condizione specificata tra parentesi e, se la condizione è vera, l'affermazione che segue il if l'istruzione viene eseguita. Il else la parte è facoltativa.

Ad esempio:

awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt

L'output mostra le righe in cui esistono duplicati e indica Nessun duplicato se non ci sono risposte duplicate nella riga.

  • mentre

Il while istruzione esegue ripetutamente un'istruzione di destinazione fintanto che la condizione specificata è vera. Ciò significa che funziona come quello del linguaggio di programmazione C. Se la condizione è vera, il corpo del ciclo viene eseguito. Se la condizione è falsa, awk continua con l'esecuzione.

Ad esempio, la seguente istruzione indica awk per stampare tutti i campi di input uno per riga:

awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
  • per

Il for funziona anche come quella di C, consentendo agli utenti di creare un ciclo che deve essere eseguito un numero specifico di volte.

Ad esempio:

awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'

L'istruzione sopra aumenta il valore di i di uno fino a raggiungere dieci e calcola il quadrato di i ogni volta.

  • pausa

La break l'istruzione esce immediatamente da un while che lo racchiude o for . Per iniziare l'iterazione successiva, usa il continue dichiarazione.

Il next l'istruzione indica awk per passare al record successivo e iniziare la scansione dei modelli dall'alto. L'exit l'istruzione indica awk che l'input è terminato.

Di seguito è riportato un esempio di break dichiarazione:

awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'

Il comando sopra interrompe il ciclo dopo 5 iterazioni.

Modelli AWK

Inserimento di un pattern davanti a un'azione in awk funge da selettore . Il selettore determina se eseguire o meno un'azione. Le seguenti espressioni possono fungere da pattern:

  • Espressioni regolari.
  • Espressioni relazionali aritmetiche.
  • Espressioni con valori di stringa.
  • Combinazioni booleane arbitrarie delle espressioni precedenti.

Le sezioni seguenti spiegano le espressioni sopra menzionate e come usarle.

Modelli di espressione regolari

I modelli di espressioni regolari sono la forma più semplice di espressioni contenenti una stringa di caratteri racchiusa tra barre. Può essere una sequenza di lettere, numeri o una combinazione di entrambi.

Nell'esempio seguente, il programma emette tutte le righe che iniziano con "A". Se la stringa specificata fa parte di una parola più grande, viene stampata anche.

awk '$1 ~ /^A/ {print $0}' employees.txt

Modelli di espressione relazionale

Un altro tipo di awk i modelli sono modelli di espressione relazionale. I modelli di espressione relazionale implicano l'utilizzo di uno qualsiasi dei seguenti operatori relazionali:<, <=, ==, !=,>= e > .

Di seguito è riportato un esempio di awk espressione relazionale:

awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'

Modelli di portata

Un pattern di intervallo è un pattern composto da due pattern separati da una virgola. I modelli di intervallo eseguono l'azione specificata per ciascuna riga tra l'occorrenza del modello uno e il modello due.

Ad esempio:

awk '/clerk/, /manager/ {print $1, $2}' employees.txt

Il modello sopra indica awk per stampare tutte le righe dell'input contenenti le parole chiave "impiegato" e "manager".

Modelli di espressioni speciali

I modelli di espressioni speciali includono BEGIN e END che denotano l'inizializzazione e la fine del programma. Il BEGIN pattern corrisponde all'inizio dell'input, prima che il primo record venga elaborato. Il END il modello corrisponde alla fine dell'input, dopo che l'ultimo record è stato elaborato.

Ad esempio, puoi istruire awk per visualizzare un messaggio all'inizio e alla fine del processo:

awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt

Combinazione di motivi

Il awk comando consente agli utenti di combinare due o più modelli utilizzando operatori logici. I modelli combinati possono essere qualsiasi combinazione booleana di modelli. Gli operatori logici per combinare i modelli sono:

  • || (o)
  • && (e)
  • ! (non)

Ad esempio:

awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt 

L'output stampa il primo e il secondo campo di quei record il cui terzo campo è maggiore di dieci e il quarto campo è minore di 20.

Variabili AWK

Il awk comando ha variabili di campo integrate, che suddividono il file di input in parti separate chiamate campi . Il awk assegna le seguenti variabili a ciascun campo dati:

  • $0 . Utilizzato per specificare l'intera riga.
  • $1 . Specifica il primo campo.
  • $2 . Specifica il secondo campo.
  • ecc.

Altri awk integrati disponibili le variabili sono:

  • NR . Conta il numero di record di input (solitamente righe). Il awk comando esegue le istruzioni modello/azione una volta per ogni record in un file.

Ad esempio:

awk '{print NR,$0}' employees.txt

Il comando visualizza il numero di riga nell'output.

  • NF . Conta il numero di campi nel record di input corrente e visualizza l'ultimo campo del file.

Ad esempio:

awk '{print $NF}' employees.txt
  • FS . Contiene il carattere utilizzato per dividere i campi nella riga di input. Il separatore predefinito è lo spazio, ma puoi utilizzare FS per riassegnare il separatore a un altro carattere (in genere in BEGIN ).

Ad esempio, puoi creare etc/passwd file (elenco utenti) più leggibile cambiando il separatore da due punti (: ) in un trattino (/ ) e stampare anche il separatore di campo:

awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
  • RS . Memorizza il carattere separatore del record corrente. La riga di input predefinita è il record di input, che rende una nuova riga il separatore di record predefinito. Il comando è utile se l'input è un file separato da virgole (CSV).

Ad esempio:

awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
  • OFS . Memorizza il separatore del campo di output, che separa i campi durante la stampa. Il separatore predefinito è uno spazio vuoto. Ogni volta che il file stampato ha diversi parametri separati da virgole, il OFS il valore viene stampato tra ogni parametro.

Ad esempio:

awk 'OFS=" works as " {print $1,$3}' employees.txt

Azioni AWK

Il awk lo strumento segue le regole che contengono coppie modello-azione. Le azioni consistono in istruzioni racchiuse tra parentesi graffe {} che contengono espressioni, istruzioni di controllo, istruzioni composte, istruzioni di input e output e istruzioni di eliminazione. Tali affermazioni sono descritte nelle sezioni precedenti.

Crea un awk script utilizzando la seguente sintassi:

awk '{action}' 

Ad esempio:

awk '{print "How to use the awk command"}'

Questo semplice comando indica awk per stampare la stringa specificata ogni volta che si esegue il comando. Termina il programma usando Ctrl+D .

Come utilizzare il comando AWK - Esempi

Oltre a manipolare i dati e produrre output formattati, awk ha altri usi in quanto è un linguaggio di scripting e non solo un comando di elaborazione del testo. Questa sezione spiega casi d'uso alternativi per awk .

  • Calcoli . Il awk comando consente di eseguire calcoli aritmetici. Ad esempio:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'

In questo esempio, eseguiamo il pipe nel comando df e utilizziamo le informazioni generate nel report per calcolare la memoria totale disponibile e utilizzata dai filesystem montati che contengono solo /dev e /loop nel nome.

Il report prodotto mostra la somma della memoria di /dev e /loop filesystem nelle colonne due e tre del df uscita.

  • Filtraggio . Il awk Il comando consente di filtrare l'output limitando la lunghezza delle righe. Ad esempio:
awk 'length($0) > 8' /etc/shells

In questo esempio, abbiamo eseguito /etc/shells file di sistema tramite awk e filtrato l'output per contenere solo le righe contenenti più di 8 caratteri.

  • Monitoraggio . Controlla se un determinato processo è in esecuzione in Linux collegando il ps comando. Ad esempio:
ps -ef | awk '{ if($NF == "clipboard") print $0}'

L'output stampa un elenco di tutti i processi in esecuzione sulla macchina con l'ultimo campo che corrisponde al modello specificato.

  • Conteggio . Puoi usare awk per contare il numero di caratteri in una riga e ottenere il numero stampato nel risultato. Ad esempio:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt

Linux
  1. Comando wc Linux con esempi

  2. Comando di ordinamento Linux con esempi

  3. Comando Tee Linux con esempi

  4. Comando testa di Linux con esempi

  5. Comando JQ in Linux con esempi

Comando Linux watch con esempi

Attendi comando in Linux con esempi

Comando di esportazione Linux con esempi

Riavvia il comando in Linux con esempi

Comando awk di Linux con 10 esempi

Comando IP Linux con esempi