Estrarre Colonne da Un File CSV con Linux

18 Agosto 2009 di Daniele Frulla


Col Sistema Operativo Linux, attraverso la Shell dei comandi è possibile fare praticamente qualunque cosa (tranne il caffè), l’importante è sapere bene quello che si sta per fare.

In questo articolo spiegherò un comando non usato spesso, ma che all’occorrenza si rivela davvero  utile e veloce per gestire file CSV.

Il comando in questione si chiama cut e serve per tagliare colonne o parti di una riga.

Generalmente per lavorare su tabelle utilizziamo software grafici abbastanza efficaci come Excel o Spreadsheet, o addirittura prodotti web come la gestione dei documenti di google.

Con linux si può direttamente lavorare sul file di testo e generare tabelle da altre tabelle semplicemente con un comando.

Per esempio, supponiamo di avere il nostro file pippo.xls e vogliamo testare il comando cut. Semplicemente salviamo il file pippo.xls in formato comuni.csv:

Codice Regione;Codice Provincia;Codice Comune;”Codice Istat del Comune
(formato alfanumerico)”;”Codice Istat del Comune
(formato numerico)”;”Codice Istat del Comune a 103 province
(formato numerico)”;”Codice Istat del Comune a 107 province
(formato numerico)”;Denominazione (italiano/tedesco);Solo denominazione in italiano;Solo denominazione in tedesco;Comune capoluogo di provincia;Zona altimetrica;Altitudine del centro (metri);Comune litoraneo;Comune Montano;Codice Sistema locale del lavoro 2001;Denominazione Sistema locale del lavoro 2001;Superficie territoriale totale (kmq);Popolazione legale 2001 (21/10/2001);Popolazione residente al 31/12/2006;Popolazione residente al 31/12/2007;Popolazione residente al 31/12/2008
01;001; 001 ;001001;1001;1001;1001;Aglié;Aglié;;0;3; 315 ;0;NM;3;IVREA;13,3;2.574;2.615;2.616;2.609
01;001; 002 ;001002;1002;1002;1002;Airasca;Airasca;;0;5; 257 ;0;NM;4;PINEROLO;15,7;3.554;3.684;3.787;3.807
01;001; 003 ;001003;1003;1003;1003;Ala di Stura;Ala di Stura;;0;1; 1.080 ;0;T;2;CIRIE’;46,1;479;473;483;475
01;001; 004 ;001004;1004;1004;1004;Albiano d’Ivrea;Albiano d’Ivrea;;0;3; 230 ;0;NM;3;IVREA;11,7;1.696;1.683;1.700;1.731
01;001; 005 ;001005;1005;1005;1005;Alice Superiore;Alice Superiore;;0;3; 610 ;0;T;3;IVREA;7,0;616;688;694;696

……

Supponiamo che questo file sia l’elenco dei comuni italiani prelevato dal sito istat.it. Questo file ha tanti dati separati dal “;”, ma vogliamo solamente la colonna del nome comune e la popolazione residente alla fine 2008. Eseguiamo il comando:

cat pippo.csv | cut -d “;” -f 9,22 | sort > comuni_residenti.txt

Avremo in questo modo sul file comuni_residenti.txt una lista dei comuni ordinata con a fianco la popolazione residente come la seguente:

Abano Terme;19.493
Abbadia Cerreto;289
Abbadia Lariana;3.258
Abbadia San Salvatore;6.775
Abbasanta;2.873
Abbateggio;443

…….

Zovencedo;846
Zubiena;1.278
Zuccarello;367
Zuclo;358
Zugliano;6.732
Zuglio;609
Zumaglia;1.148
Zumpano;2.275
Zungoli;1.277
Zungri;2.066

Si possono vedere altre opzioni digitando da shell:

cut –help

Usage: cut OPTION… [FILE]…
Print selected parts of lines from each FILE to standard output.

Mandatory arguments to long options are mandatory for short options too.
-b, –bytes=LIST        select only these bytes
-c, –characters=LIST   select only these characters
-d, –delimiter=DELIM   use DELIM instead of TAB for field delimiter
-f, –fields=LIST       select only these fields;  also print any line
that contains no delimiter character, unless
the -s option is specified
-n                      (ignored)
–complement        complement the set of selected bytes, characters
or fields.
-s, –only-delimited    do not print lines not containing delimiters
–output-delimiter=STRING  use STRING as the output delimiter
the default is to use the input delimiter
–help     display this help and exit
–version  output version information and exit

Use one, and only one of -b, -c or -f.  Each LIST is made up of one
range, or many ranges separated by commas.  Selected input is written
in the same order that it is read, and is written exactly once.
Each range is one of:

N     N’th byte, character or field, counted from 1
N-    from N’th byte, character or field, to end of line
N-M   from N’th to M’th (included) byte, character or field
-M    from first to M’th (included) byte, character or field

With no FILE, or when FILE is -, read standard input.

 

Fonte: www.newstechnology.eu

 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Copyright di Caterina Mezzapelle Part. I.V.A. 02413940814 - R.E.A. 191812