Tutoriel Linux

Taglio sotto Linux: estrazione di una colonna senza usare artiglieria pesante

Débutant4 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Hai un file CSV, l’output di un comando o un file di log e vuoi recuperare solo una singola colonna senza scrivere uno script completo? Questo strumento è pensato proprio per questo. taglioIl processo di ordinazione è semplice, rapido e molto comodo quando il formato di partenza è pulito.

In questa guida ti mostrerò come usare taglio con un delimitatore, come si estraggono caratteri specifici e soprattutto in quali casi è meglio passare a awk O sed. taglio Taglia molto bene, ma non rileva i file danneggiati.

Qual è lo scopo del comando cut in Linux?

taglio Legge ogni riga, quindi conserva solo la parte richiesta. Puoi lavorare carattere per carattere con -C, per byte con -B, o per campi con -FIn pratica, è per lo più -F con -D che è il più utile.

cut -d ':' -f 1 /etc/passwd

Qui, -D ':' indica che i campi sono separati da due punti. -f 1 chiede il primo campo. Su /etc/passwdQui vengono visualizzati i nomi degli account locali.

Prima dell’uso taglio Quando si esamina un file di sistema, è consigliabile iniziare visualizzando alcune righe. Questo impedisce di trarre conclusioni basandosi su un formato non verificato.

testa -5 /etc/passwd

Estrazione di una colonna con un delimitatore

La sintassi più utile è la seguente:

taglia -d 'DELIMINATORE' -f NUMERO file

Esempio con un file CSV molto semplice:

utenti gatto.csv
nome, email, ruolo
alice,[email protected],admin
marc,[email protected],reading

Per estrarre la seconda colonna:

cut -d ',' -f 2 utenti.csv

Risultato atteso:

e-mail
[email protected]
[email protected]

È possibile richiedere anche più campi:

taglia -d ',' -f 1,3 utenti.csv

O una spiaggia:

taglia -d ',' -f 1-2 utenti.csv

Attenzione: taglio Conta i campi a partire da 1, non da 0. È assurdo, ma è una classica fonte di errore quando si passa da un linguaggio di scripting a un comando di shell.

Elaborazione di un ordine in uscita

taglio Diventa interessante con una pipe. Esempio semplice: recuperare solo i nomi utente locali da /etc/passwd.

cat /etc/passwd | cut -d ':' -f 1

Possiamo scrivere in modo più breve senza gatto :

cut -d ':' -f 1 /etc/passwd

Un altro esempio: estrarre i punti di montaggio da un output pulito di df.

df -h --output=source,pcent,target | tail -n +2

In questo caso specifico, taglio non è la scelta migliore, poiché le colonne sono allineate con spaziatura variabile. Per questo tipo di output, awk spesso è più affidabile:

df -h --output=source,pcent,target | awk 'NR>1 {print $2, $3}'

Questo è il limite da ricordare: taglio Funziona molto bene quando il separatore è chiaro e stabile. Se la spaziatura varia in base alla lunghezza della colonna, non forzarla.

Estrai caratteri specifici

Con -CÈ possibile estrarre le posizioni dei caratteri. Questo è utile per i file a larghezza fissa o per verificare rapidamente un prefisso.

echo "prod-server-01" | cut -c 1-7

Risultato:

server

Alcune forme utili:

taglia -c 1-5 file.txt
taglia -c 8- file.txt
taglia -c -10 file.txt

Il primo comando mantiene i caratteri da 1 a 5. Il secondo mantiene il carattere da 8 fino alla fine. Il terzo mantiene il carattere da 10 dall’inizio fino al carattere 10.

Le insidie ​​dei file CSV e degli spazi

L’errore più comune riguarda i veri file CSV. Se una colonna contiene una virgola tra virgolette, taglio Non comprende la logica dei file CSV. Continua a dividere i file in corrispondenza di ogni virgola.

nome, commento
Alice, "amministratore, accesso completo"

In questo esempio, taglia -d ',' -f 2 Questo metodo non fornirà un risultato affidabile. Per ottenere un vero file CSV, utilizza uno strumento in grado di leggere il formato, come Python, Miller, csvkit o un processore adatto al tuo ambiente.

Un altro inconveniente: il separatore predefinito di taglio Per i campi, il delimitatore è la tabulazione, non lo spazio. Se stai testando un comando con spazi, specifica esplicitamente il delimitatore.

echo "web01 prod attivo" | cut -d ' ' -f 2

Questo comando ritorna produzioneMa se la riga contiene più spazi consecutivi, taglio Conta anche i campi vuoti. Di nuovo, awk diventa spesso più pulito.

Un esempio utile che utilizza i log

Su un server è possibile combinare journalctl, grep E taglio Per isolare una parte di una riga. Un esempio volutamente semplice: recuperare le prime colonne temporali da un’esportazione.

journalctl -u ssh -n 20 --no-pager | cut -d ' ' -f 1-3

Questa non è un’analisi completa del registro, ma può essere sufficiente per controllare rapidamente i tempi o preparare un breve report da copiare in un ticket. Per una diagnosi più completa, ho descritto in dettaglio l’utilizzo di journalctl all’ultimo avvio di Linux.

Quando dovrei passare ad awk invece di cut?

Utilizzo taglio Quando il file è semplice: separatore singolo, colonne stabili, necessità di velocità. Passa a awk quando è necessario filtrare, calcolare, ignorare righe, gestire spazi variabili o applicare una condizione.

#tagliare è sufficiente
cut -d ':' -f 1 /etc/passwd

#awk diventa più utile
awk -F ':' '$3 >= 1000 {print $1}' /etc/passwd

La documentazione di tagliare(1) dettaglia le opzioni disponibili. Per l’uso quotidiano, ricorda soprattutto -D, -F E -C.

La mia semplice regola: se riesci a spiegare il guasto in una frase, taglio è probabilmente sufficiente. Se inizi ad aggiungere eccezioni nella tua testa, prendilo direttamente awk o una vera sceneggiatura. Risparmierai tempo.

sudo apt update && sudo apt upgrade