In questo articolo, spiegheremo l'uso di base del comando awk e come può essere usato per dividere un file di stringhe. Abbiamo eseguito gli esempi da questo articolo su un sistema Debian 10 Buster ma possono essere facilmente replicati sulla maggior parte dei Distri Linux.
Il file di esempio che useremo
Il file di esempio di stringhe che useremo per dimostrare l'uso del comando AWK è il seguente:
Questo è ciò che indica ogni colonna del file di esempio:
Esempio 1: Usa AWK per stampare tutte le righe di un file
Stampa ogni riga di un file specificato è il comportamento predefinito del comando AWK. Nella seguente sintassi del comando AWK, non stiamo specificando alcun modello che AWK dovrebbe stampare, quindi il comando dovrebbe applicare l'azione "stampa" a tutte le righe del file.
Sintassi:
$ awk 'print' file.TXT
Esempio:
In questo esempio, sto dicendo al comando awk di stampare il contenuto del mio file di esempio, riga per riga.
$ awk 'print' sample_file.TXT
Esempio 2: Usa AWK per stampare solo le righe che corrispondono a un determinato motivo
Con AWK, è possibile specificare uno schema e il comando stamperà solo le righe che corrispondono a questo modello.
Sintassi:
$ awk '/ pattern_to_be_matched/ print' file.TXT
Esempio:
Dal file di esempio, se voglio stampare solo le righe che contengono la variabile 'B', posso usare il seguente comando:
$ awk '/ b/ print' sample_file.TXT
Per rendere l'esempio più significativo, lasciami stampare solo le informazioni sui dipendenti che sono il professore.
$ awk '/ professor/ print' sample_file.TXT
Il comando stampa solo le righe/voci che contengono la stringa "professore", quindi abbiamo informazioni più preziose derivate dai dati.
Esempio 3. Usa AWK per dividere il file in modo che vengano stampati solo campi/colonne specifiche
Invece di stampare l'intero file, puoi fare awk per stampare solo colonne specifiche del file. Awk tratta tutte le parole, separate dallo spazio bianco, in una linea come record di colonna per impostazione predefinita. Memorizza il record in una variabile $ n. Dove $ 1 rappresenta la prima parola, $ 2 memorizza la seconda parola, $ 3 il quarto e così via. $ 0 memorizza l'intera linea in modo che la linea Who sia stampata, come spiegato nell'esempio 1.
Sintassi:
$ awk 'print $ n, .. .' nome del file.TXT
Esempio:
Il comando seguente stamperà solo la prima colonna (nome) e la seconda colonna (soggetto) del mio file di esempio:
$ awk 'stampa $ 1, $ 2' sample_file.TXT
Esempio 4: Usa AWK per contare e stampare il numero di righe in cui è abbinato uno schema
Puoi dire a Awk di contare il numero di righe in cui viene abbinato uno schema specificato e quindi output che "conta".
Sintassi:
$ awk '/pattern_to_be_matched/++ cnt end print "count =", cnt'
nome del file.TXT
Esempio:
In questo esempio, voglio contare il numero di persone che insegnano all'argomento "inglese". Pertanto direrò al comando AWK di abbinare il modello "inglese" e stampare il numero di righe in cui questo modello è abbinato.
$ awk '/inglese/++ cnt end print "count =", cnt' sample_file.TXT
Il conteggio qui suggerisce che 2 persone insegnano l'inglese dai registri dei file di esempio.
Esempio 5: utilizzare AWK per stampare solo righe con più di un numero specifico di caratteri
Per questo compito, utilizzeremo la funzione AWK integrata chiamata "lunghezza". Questa funzione restituisce la lunghezza della stringa di input. Pertanto, se vogliamo che AWK stampino solo righe con più di, o anche meno di il numero di caratteri, possiamo usare la funzione di lunghezza nel modo seguente:
Per le linee di stampa con caratteri superiori a un numero:
$ awk 'lunghezza ($ 0)> n' nome file.TXT
Per le linee di stampa con caratteri inferiori a un numero:
$ awk 'lunghezza ($ 0) < n' filename.txt
Dove n è il numero di caratteri che si desidera specificare per una riga.
Esempio:
Il comando seguente stamperà solo le righe del mio file di esempio che hanno caratteri più di 30:
$ awk 'lunghezza ($ 0)> 30' Sample_file.TXT
Esempio 6: usa AWK per salvare l'output del comando su un altro file
Utilizzando l'operatore di reindirizzamento '>', è possibile utilizzare il comando awk per stampare il suo output su un altro file. Questo è il modo in cui puoi usarlo:
Criteri_to_print "$ awk.txt> outputfile.TXT
Esempio:
In questo esempio, userò l'operatore di reindirizzamento con il mio comando AWK per stampare solo i nomi dei dipendenti (colonna 1) a un nuovo file:
$ awk 'stampa $ 1' Sample_file.txt> Employee_names.TXT
Ho verificato tramite i comandi CAT che il nuovo file contiene solo i nomi dei dipendenti.
Esempio 7: Usa AWK per stampare solo righe non vuote da un file
AWK ha alcuni comandi integrati che è possibile utilizzare per filtrare l'output. Ad esempio, il comando NF viene utilizzato per mantenere un conteggio dei campi all'interno del record di input corrente. Qui useremo il comando NF per stampare solo le righe non vuote del file:
$ awk 'nf> 0' Sample_file.TXT
Ovviamente, puoi usare il seguente comando per stampare le righe vuote:
$ awk 'nf < 0' sample_file.txt
Esempio 8: utilizzare AWK per contare le righe totali in un file
Un'altra funzione integrata chiamata NR mantiene un conteggio del numero di record di input (di solito righe) di un determinato file. È possibile utilizzare questa funzione in AWK come segue per contare il numero di righe in un file:
$ awk 'end print nr' sample_file.TXT
Queste erano le informazioni di base che devi iniziare con i file di scissione con il comando awk. Puoi usare la combinazione di questi esempi per recuperare informazioni più significative dal tuo file di stringhe tramite AWK.