Seleziona una colonna di testo arbitraria in UNIX

UNIX ha capacità di elaborazione del testo straordinariamente potenti. Esistono numerosi modi per risolvere lo stesso problema. Spesso, ad esempio, è necessario estrarre una singola colonna di dati da un file di testo o da un flusso di output. Questa ricetta tecnologica presenterà diverse soluzioni a questo problema.


Molti file di dati hanno campi dati delimitati da un singolo carattere come una tabulazione o due punti. Per estrarre il campo del nome completo da / etc / passwd, il quinto campo delimitato da due punti, utilizzare:

cut -d: -f 5 / etc / passwd

Il comando di taglio consente una grande flessibilità nel tagliare i dati. In questo caso, il -d: dirige il taglio per utilizzare un carattere di due punti come delimitatore. Il -f 5 il parametro dirige il taglio per estrarre solo il quinto campo. Il parametro di campo rende estremamente flessibile il taglio. Altri esempi sono -f 2-5 per estrarre i campi da 2 a 5, -f 1,3,7 per estrarre i campi primo, terzo e settimo.

Per estrarre un set fisso di colonne, ad esempio i numeri di colonna da 44 a 49 da una lunga lista di directory (ls -l), utilizzare il seguente comando:

ls -l | cut -c 44-49

Su molti sistemi UNIX, queste colonne rappresentano la data di modifica. Come il parametro -f, il parametro -c può accettare valori alternativi come -c 5,7,6,8 presenterà quelle posizioni di carattere in quell'ordine.

Una delle più complesse estrazioni di colonne comporta la presenza di una quantità variabile di spazi bianchi tra i campi. Per estrarre il campo ID processo (secondo) da un elenco di processi (ps -ef), il taglio non funzionerà. Un altro potente manipolatore di testo in UNIX è awk che capisce che diversi spazi dovrebbero essere contati come un singolo spazio bianco. Per estrarre il pid da un ps -ef, usa:

ps -ef | testa | awk '{print $ 2}'

Awk è uno strumento incredibilmente potente, e questa è un'applicazione banale ma utile.