Split in bash – cut

Spesso e volentieri un amministratore di sistema si trova a dover manipolare record in forma di righe di testo in cui i campi sono fissi o separati da un carattere che fa da separatore.

Che si tratti di un file csv (comma separated values: valori separati da virgola) o del file delle password di un sistema linux cut è il comando che fa per noi.

Si tratta di un programma molto versatile che permette di spezzettare una stringa in più parti secondo diversi criteri che conviene illustrare con alcuni esempi.

Prendiamo ad esempio la stringa “primo:secondo:terzo:quarto:quinto:sesto” e cerchiamo di spezzarla in più parti.

$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 3 -d:
terzo
$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 3,2 -d:
secondo:terzo
$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 2-4 -d:
secondo:terzo:quarto
$

Questi esempi illustrano l’utilizzo del parametro f, che sta per field, ed il parametro d, delimiter.

il parametro -d (o anche –delimiter) indica il carattere che dovrà essere considerato il separatore dei vari campi. In questo caso il delimitatore è rappresentato dai due punti. In caso di spazio o carattere che verrebbe espanso dalla shell bisogna farlo precedere dal backslash; ad esempio per indicare lo spazio come delimitatore si utilizzerebbe la sintassi “-d\ “. Nota: non sono possibili separatori multipli

Il parametro -f invece stabilisce quali campi devono essere riportati come risultato. Ci sono più modalità di selezione:

  • la selezione singola, ad esempio -f 3, è il caso più semplice e prevede che per ogni riga in ingresso venga messo in output una riga che contiene solo il campo specificato (i campi vengono contati a partire da 1);
  • la selezione multipla permette di specificare un intervallo di campi a partire dai suoi estremi, ad esempio -f 3-7 seleziona tutti i campi dal terzo al settimo compresi gli estremi. E’ importante che gli estremi siano ordinati, prima il minore, ma non è necessario che siano tutti presenti, se l’estremo superiore dell’intervallo non esiste verranno selezionati tutti i campi disponibili fino alla fine della stringa;
  • l’ultima modalità di selezione, la sequenza, permette di elencare, separandoli con delle virgole campi o intervalli di campi. L’esempio riportato -f 3,2 serve a far notare che l’ordine dei campi nella selezione è ininfluente e che –f 2,4 e -f 4,2 sono equivalenti e che verranno riportati in output i campi 2 e 4 (in quest’ordine). Altri esempi validi sono: -f 3-5,1 o -f 1,1-3,9-11. Nota: un errore comune nella selezione multipla consiste nel far seguire la virgola da uno spazio come si dovrebbe fare secondo le regole di dattilografia;

Non abbiamo finito di sviscerare le potenzialità di cut ma penso che potremmo fermarci qui in attesa di un prossimo post in cui tratteremo della selezione per offset

E questo e tutto (fino al prossimo post)

Annunci