Awk

Come dividere un file di stringhe con Awk

Come dividere un file di stringhe con Awk
Il comando awk di Linux (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:

In questo articolo spiegheremo l'utilizzo di base del comando awk e come può essere usato per dividere un file di stringhe. Abbiamo eseguito gli esempi di questo articolo su un sistema Debian 10 Buster, ma possono essere facilmente replicati sulla maggior parte delle distribuzioni Linux.

Il file di esempio che useremo

Il file di esempio di stringhe che utilizzeremo per dimostrare l'utilizzo 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

La stampa di ogni riga di un file specificato è il comportamento predefinito del comando awk. Nella seguente sintassi del comando awk, non stiamo specificando alcun pattern che awk dovrebbe stampare, quindi il comando dovrebbe applicare l'azione "print" a tutte le righe del file.

Sintassi:

$ awk 'print' nome 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: utilizza awk per stampare solo le linee che corrispondono a un determinato motivo

Con awk, puoi specificare un motivo e il comando stamperà solo le linee che corrispondono a quel motivo.

Sintassi:

$ awk '/pattern_to_be_matched/ print' nome file.TXT

Esempio:

Dal file di esempio, se voglio stampare solo la/e riga/e che contengono la variabile 'B', posso usare il seguente comando:

$ awk '/B/ print' sample_file.TXT

Per rendere l'esempio più significativo, fammi stampare solo le informazioni sui dipendenti che sono "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 specifici

Invece di stampare l'intero file, puoi fare in modo che awk stampi solo colonne specifiche del file. Awk tratta tutte le parole, separate da spazi, in una riga come un 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 la quarta e così via. $0 memorizza l'intera riga in modo che venga stampata la riga who, come spiegato nell'esempio 1.

Sintassi:

$ awk 'stampa $N,… .' nome del file.TXT

Esempio:

Il seguente comando stamperà solo la prima colonna (nome) e la seconda colonna (oggetto) del mio file di esempio:

$ awk 'print $1, $2' sample_file.TXT

Esempio 4: utilizzare Awk per contare e stampare il numero di righe in cui è abbinato un motivo

Puoi dire a awk di contare il numero di righe in cui viene abbinato un modello specificato e quindi emettere quel "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 la materia "inglese". Quindi dirò al comando awk di abbinare il pattern "english" e stamperò il numero di righe in cui questo pattern è abbinato.

$ awk '/english/++cnt END print "Count = ", cnt' sample_file.TXT

Il conteggio qui suggerisce che 2 persone stanno insegnando inglese dai record del file di esempio.

Esempio 5: utilizzare awk per stampare solo righe con più di un numero specifico di caratteri

Per questo compito, useremo la funzione awk incorporata chiamata "length". Questa funzione restituisce la lunghezza della stringa di input. Quindi, se vogliamo che awk stampi solo le righe con più o anche meno del numero di caratteri, possiamo usare la funzione length nel modo seguente:

Per la stampa di righe con caratteri maggiori di un numero:

$ awk 'lunghezza($0) > n' nomefile.TXT

Per la stampa di righe con caratteri inferiori a un numero:

$ awk 'lunghezza($0) < n' filename.txt

Dove n è il numero di caratteri che vuoi specificare per una riga.

Esempio:

Il seguente comando stamperà solo le righe del mio file di esempio che hanno caratteri più di 30:

$ awk 'lunghezza($0) > 30' file_campione.TXT

Esempio 6: usa awk per salvare l'output del comando in un altro file

Usando l'operatore di reindirizzamento '>', puoi usare il comando awk per stampare il suo output su un altro file. Questo è il modo in cui puoi usarlo:

$ awk 'criteri_da_stampare" nome file.txt > file di output.TXT

Esempio:

In questo esempio, utilizzerò l'operatore di reindirizzamento con il mio comando awk per stampare solo i nomi dei dipendenti (colonna 1) in un nuovo file:

$ awk 'print $1' sample_file.txt > nomi_impiegati.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 puoi usare per filtrare l'output. Ad esempio, il comando NF viene utilizzato per tenere 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 linee totali in un file

Un'altra funzione integrata chiamata NR tiene un conteggio del numero di record di input (di solito righe) di un dato file. Puoi usare 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 necessarie per iniziare a dividere i file con il comando awk. Puoi usare la combinazione di questi esempi per recuperare informazioni più significative dal tuo file di stringhe tramite awk.

Installa l'ultimo gioco di strategia OpenRA su Ubuntu Linux
OpenRA è un motore di gioco di strategia in tempo reale gratuito/libero che ricrea i primi giochi di Westwood come il classico Command & Conquer: Red ...
Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...
Come utilizzare GameConqueror Cheat Engine in Linux
L'articolo copre una guida sull'utilizzo del motore cheat GameConqueror in Linux. Molti utenti che giocano su Windows utilizzano spesso l'applicazione...