Come dividere un file di stringhe con AWK

Come dividere un file di stringhe con AWK
Il comando Linux Awk (abbreviato dai nomi degli sviluppatori; Aho, Weinberger e Kernighan) è un ottimo modo per elaborare e analizzare un file di stringhe. Affinché i file siano più informativi, devono essere organizzati sotto forma di righe e colonne. Quindi, puoi usare AWK su questi file per:
  • Scansiona i file, riga per riga.
  • Dividi ogni riga in campi/colonne.
  • Specificare i modelli e confrontare le righe del file con tali schemi
  • Eseguire varie azioni sulle righe che corrispondono a un determinato modello

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:

  • La prima colonna contiene il nome di dipendenti/insegnanti in una scuola
  • La seconda colonna contiene l'argomento che il dipendente insegna
  • La terza colonna indica se il dipendente è professore o professore assistente
  • La quarta colonna contiene la retribuzione del dipendente

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.