Guida all'uso del comando cut di Linux

Il comando cut in Linux è un potente strumento di elaborazione del testo utilizzato per estrarre sezioni specifiche da ogni riga di un file o da input piped. Non altera il file originale, ma legge semplicemente il contenuto e visualizza le parti desiderate sull’output standard. In questo articolo, esploreremo lo scopo del comando cut in Linux e dimostreremo come utilizzarlo attraverso esempi pratici della vita reale.
Comprendere il comando cut
Il comando cut è uno strumento prezioso per chi lavora con testo strutturato, consentendo una manipolazione e un’estrazione dei dati efficiente nei sistemi simili a Unix. Estrae parti di una riga in base alle posizioni dei byte, posizioni dei caratteri, delimitatori o campi. Questo lo rende particolarmente utile per filtrare e organizzare i dati in script shell e operazioni da riga di comando. È anche utile per attività come il recupero di colonne da file CSV, il ritaglio di caratteri o l’analisi di file di log. Anche se è comunemente usato con file, il comando cut può elaborare anche l’output di altri comandi quando utilizzato in una pipeline.
Sintassi di base del comando cut
Il comando cut ha una sintassi molto semplice che utilizza opzioni e un nome di file. Ecco come funziona:
cut[OPZIONI][FILE]Qui, le OPZIONI ti consentono di controllare come funziona il comando cut. Puoi scegliere un separatore di campo (come una virgola), selezionare determinati campi, impostare intervalli di campo, ignorare righe senza il separatore, ecc. FILE è il file di destinazione da cui desideri estrarre i dati. Il comando cut leggerà dall’input standard se non specifichi un file. Inoltre, puoi specificare più file; in tal caso, il comando cut li tratterà come uno combinando i loro contenuti prima dell’elaborazione.
Opzioni comunemente usate
Il comando cut ti consente di estrarre parti specifiche di testo da un file o input. Puoi dirgli cosa estrarre usando diverse opzioni, come byte, caratteri o campi, e impostando un separatore specifico (delimitatore). Ecco le opzioni comuni:
- -f o –fields=LIST: Seleziona campi specifici in base a un delimitatore scelto.
- -b o –bytes=LIST: Estrae determinati byte da ogni riga.
- -c o –characters=LIST: Estrae caratteri specifici da ogni riga.
- -d o –delimiter: Imposta un delimitatore personalizzato invece del tab predefinito.
- –complement: Mostra tutto tranne i campi, byte o caratteri selezionati.
- -s o –only-delimited: Salta le righe che non hanno il delimitatore. Per impostazione predefinita, tali righe sono incluse.
- –output-delimiter: Ti consente di scegliere un delimitatore diverso per l’output. Per impostazione predefinita, cut utilizza lo stesso delimitatore dell’input.
Le opzioni -f, -b e -c utilizzano un LIST per definire cosa estrarre, come campi, byte o caratteri. Puoi specificare quanto segue:
- Un singolo numero come 2
- Numeri multipli separati da virgole, come 1,3,5
- Un intervallo come 2-4 (significa estrarre da 2 a 4)
N-per indicare dalla posizione N fino alla fine-Mper indicare dall’inizio fino alla posizione M
Come funziona il comando cut in Linux
Rivediamo alcuni esempi pratici per comprendere come funziona il comando cut in Linux. Per questo scopo, prima crea un file chiamato “mte.csv” utilizzando il comando echo:
echo -e "empID,empName,empDesig\n101,Anees,Author\n102,Asghar,Manager\n103,Damian,CEO" > mte.csvVerifichiamo il contenuto del file utilizzando il comando cat:
cat mte.csv
Qui, è importante notare che il comando cut non modifica il file, ma mostra semplicemente l’output selezionato in base a ciò che chiedi.
Estrarre dati per caratteri
Usa l’opzione -c insieme al comando cut per estrarre caratteri per posizione:
cut -c1,8 mte.csvQuesto comando estrae il primo e l’ottavo carattere da ciascuna riga:
Per estrarre caratteri tra posizioni specifiche o intervalli, possiamo utilizzare il comando cut come segue:
cut -c1-8 mte.csvQuesto comando estrae i caratteri dall’ottava posizione (tra 1 e 8) da ciascuna riga:
Estrazione per byte
Possiamo utilizzare l’opzione -b con il comando cut per estrarre byte specifici da ogni riga:
cut -b1-3 mte.csvQuesto comando estrae i primi tre byte da ciascuna riga del file denominato mte.csv:
Estrazione per campo (colonna)
Puoi estrarre un intero campo di un file utilizzando il comando cut. Per fare ciò, usa -f con l’opzione -d, come segue:
cut -d',' -f2 mte.csvIn questo comando, -d',' imposta il delimitatore a una virgola e -f2 indica a cut di estrarre il secondo campo da ogni riga nel file mte.csv:
Usare delimitatori personalizzati in cut
Il comando cut utilizza un tab come delimitatore, per impostazione predefinita. Tuttavia, se i tuoi campi sono separati da qualcosa di diverso da un tab, usa -d per impostare il delimitatore giusto. Ad esempio, possiamo ottenere la quinta parola da una frase separata da spazi utilizzando il delimitatore -d come segue:
echo "Hey! Geeks Welcome to Maketecheasier.com" | cut -d' ' -f5Saltare determinati campi durante l’estrazione
Puoi escludere campi specifici mentre estrai testo da un file utilizzando l’opzione --complement con il comando cut. Questa opzione istruisce il comando cut a restituire tutti i campi tranne quelli specificati:
cut -d',' -f1 mte.csv --complementQuesto comando salterà la prima colonna e restituirà il resto del contenuto:
Cambiare il delimitatore predefinito nell’output
Per impostazione predefinita, il comando cut preserva il delimitatore di input nell’output quando estrae campi. Tuttavia, puoi cambiare il delimitatore di output utilizzando l’opzione --output-delimiter quando lavori con l’estrazione basata sui campi:
cut -d',' -f1-3 --output-delimiter='-' mte.csvQuesto comando utilizza il trattino - come separatore nell’output:
Usare cut con altri comandi Linux utili
Puoi anche utilizzare cut con altri comandi Linux utilizzando il simbolo della pipeline. Ad esempio, il seguente comando estrae i primi 5 caratteri da ogni riga dell’output del comando who:
who | cut -c1-5Nell’esempio seguente, utilizziamo il comando cut insieme a head per visualizzare le prime due righe del file “mte.csv” ed estrarre solo i campi empName e empDesig:
head -n2 mte.csv | cut -d',' -f2,3Gestire formati di dati irregolari con il comando cut di Linux
Il comando cut funziona meglio quando i dati sono ordinati in modo chiaro, con lo stesso delimitatore (come una virgola o un tab) che separa ogni parte. Ma se il file ha spazi irregolari o delimitatori misti, cut potrebbe non funzionare bene da solo. In tali situazioni, è utile prima ripulire i dati utilizzando comandi come tr o sed per garantire che cut possa estrarre le parti giuste.
Gestire spazi extra
Considera un file chiamato “mteData.txt” in cui i campi sono separati da più spazi, come mostrato di seguito:
cat mteData.txtPoiché cut si aspetta un delimitatore singolo e coerente, possiamo semplificare lo spazio utilizzando tr prima di applicare cut:
cat mteData.txt | tr -s ' ' | cut -d' ' -f1-2Questo comando legge il contenuto di “mteData.txt”, utilizza tr per sostituire più spazi con uno singolo e poi utilizza cut per estrarre i primi due campi separati da spazi:
Gestire delimitatori misti
Se un file utilizza una combinazione di spazi e virgole come delimitatori, possiamo normalizzare il formato utilizzando sed. Ad esempio, un file chiamato “mteData1.txt” contiene il seguente contenuto:
cat mteData1.txtUtilizziamo il comando sed con cut per sostituire tutti gli spazi con una virgola e poi estrarre i primi e i terzi campi separati da virgole:
sed 's/ /,/g' mteData1.txt | cut -d',' -f1,3Conclusione
In questo articolo, abbiamo esplorato il comando cut di Linux, un comando utile in Linux per estrarre dati da file o input piped. Con la sua sintassi semplice, puoi facilmente ottenere caratteri, byte o campi in base a un delimitatore. Abbiamo anche dimostrato come utilizzare il comando cut con altri comandi come tr, sed e head per gestire dati disordinati e semplificare l’output. Che tu stia lavorando con file CSV, analizzando log o ripulendo dati, il comando cut è uno strumento indispensabile per l’elaborazione del testo su sistemi simili a Unix.