Unire enne file CSV
A cura di
Totò Fiandaca
| issue
#180
| guida/e
Andrea Borruso
Caso d’uso
Avendo a disposizione 10 file CSV, ognuno cosi strutturato:
file CSV 1:
nome | campo1 | campo2 | campo3 |
---|---|---|---|
A | 10 | 25 | ciao |
B | 102 | 1000 | w andrea |
H | 10.4 | 32.33 | w miller |
… | … | … | …. |
file CSV n-esimo:
nome | campo1 | campo2 | campo3 |
---|---|---|---|
AA | 101 | 25 | cucu |
BA | 102 | 1000 | w ODS |
HA | 104 | 32.33 | w VisiData |
… | … | … | …. |
come unire (fare append, mergiare) i 10 file CSV per ottenerne uno solo:
cat *.csv >./out.csv
il comando di sopra unisce tutto, quindi anche le 10 righe di intestazione.
Introduzione
cat
non è un’applicazione “csv aware”, ovvero non tiene conto delle specifiche del formato e quindi la prima riga è uguale alla 37. Lui di base stampa righe.
Soluzione tramite loop
Estrarre la prima riga con head -n 1
e metterla in un file, poi in for loop con tail -n +2
estrarre da riga 2 in poi da tutti i csv, poi in append su quel file con l’intestazione. Oppure:
Soluzione con Miller
Oppure usare una utility che tenga conto del formato (quindi sa che c'è una riga di intestazione), come Miller
, il comando è:
mlr --csv cat ./*.csv >./output.csv