La conversione di un file CSV in formato XML può essere necessaria quando si lavora con diversi tipi di software o sistemi che supportano specificamente uno di questi formati. Sebbene strumenti avanzati come Python o software dedicati siano spesso utilizzati, Bash può essere una soluzione semplice ed efficace per compiti basilari.
Supponiamo di avere un file CSV chiamato input.csv
con il seguente contenuto:
id,name,age
1,John,30
2,Jane,25
3,Bob,22
Quindi creiamo il codice principale:
#!/bin/bash
# Verifica dei parametri di input
if [ "$#" -ne 2 ]; then
echo "Uso: $0 input.csv output.xml"
exit 1
fi
# File di input e output
input_file="$1"
output_file="$2"
# Controllo dell'esistenza del file CSV
if [ ! -f "$input_file" ]; then
echo "Errore: Il file $input_file non esiste."
exit 1
fi
# Inizio del file XML
echo "<root>" > "$output_file"
# Leggi il file CSV riga per riga
while IFS= read -r line || [ -n "$line" ]; do
if [[ $header_processed != "true" ]]; then
# Leggi l'intestazione (prima riga del CSV)
IFS=',' read -r -a headers <<< "$line"
header_processed="true"
else
# Leggi il contenuto delle righe successive
IFS=',' read -r -a fields <<< "$line"
echo " <record>" >> "$output_file"
for i in "${!headers[@]}"; do
echo " <${headers[i]}>${fields[i]}</${headers[i]}>" >> "$output_file"
done
echo " <record>" >> "$output_file"
fi
done < "$input_file"
# Chiusura del file XML
echo "</root>" >> "$output_file"
echo "Conversione completata: $output_file"
Ecco come appare il file output.xml
:
<root>
<record>
<id>1</id>
<name>John</name>
<age>30</age>
</record>
<record>
<id>2</id>
<name>Jane</name>
<age>25</age>
</record>
<record>
<id>3</id>
<name>Bob</name>
<age>22</age>
</record>
</root>
Conclusione
Questo script Bash offre un metodo rapido per convertire file CSV in XML senza dover installare software aggiuntivo. È particolarmente utile per file semplici e scenari in cui una soluzione leggera è sufficiente. Per progetti più complessi, linguaggi come Python offrono librerie più potenti per lavorare con formati strutturati come XML e CSV.