Chi usa maneggiare grandi archivi di testo può succedere di aver problemi con l'encoding e la dimensione delgli stessi.
Mi sono preoccupato di creare uno script in bash che può servire a risolvere questi due problemi con un comando.
Lo script andrà ad analizzare il file e rileverà il tipo di encoding originale e successivamente sarà convertito con l'encoding "UTF8", successivamente sarà compresso in formato "gzip"
Come prima cosa necessiteremo creare un file che conterrà il codice permettendo così l'esecuzione di tutti i passi necessari.
Aprire un terminale e creare un file con il nome "convertitore.sh"
nano convertitore.sh
Inserire i vari comandi che eseguono, uno ad uno, per montare lo script.
#!/bin/bash
# Copyright Salvatore Castiglione 2023
# Definizioni delle variabili iniziali
FILE=$1
ENCODING_END='utf8'
#Controlla se il comando è eseguito con il parametro contenente il nome del file da convertire
if [ -z "$1" ]; then
clear
echo "Digitare il nome del file che si vuole trattare."
echo "Es: ./convertitore.sh nome_file.csv"
exit 1
else
ENCODING_START=$(file -bi $FILE | awk '{print $2}' | awk '{print substr($0,9)}')
echo ""
echo ""
echo "File: $FILE con encoding $ENCODING_START"
echo ""
read -p "Un tasto per continuare."
#Converte l'encoding del file da un tipo ad un'altro tipo
echo "Conversione del file in corso..."
iconv -f $ENCODING_START -t $ENCODING_END $FILE -o $FILE.$ENCODING_END
#Manipola il nome del file per poter inserire, tra nome e estensione, il tipo di encoding.
NOME_INIZIALE=$FILE.$ENCODING_END
NOME_FILE=$(basename $FILE .csv)
EXT_CSV=$(echo "$FILE" | cut -f 2- -d '.')
NOME_FINALE="${NOME_FILE}_${ENCODING_END}.${EXT_CSV}"
#Rinomina il file appena convertito con il nome composto dal tipo di encoding.
echo "Rinomina il file convertito"
mv $NOME_INIZIALE $NOME_FINALE
#Mostra come il none finale del file è stato modificato
END=$(file -bi $NOME_FINALE | awk '{print $2}' | awk '{print substr($0,9)}')
echo "Encoding del file: $NOME_FINALE modificata in: $END "
#Zippa il file, già codificato, usando il formato Gzip
read -p "Un tasto per continuare la compressione in formato GZ"
echo "Compressione del file in corso..."
#gzip -k $NOME_FINALE
gzip $NOME_FINALE
echo "Compressione in formato Gzip completata con successo!!!"
echo "---------------------------------------------------------------------------------"
echo "Il nome del file convertito si chiama ${NOME_FINALE}.gz"
echo ""
fi
Per l'esecuzione del comando sarà necessario aggiungere l'attributo di esecuzione al file usando il comando:
chmod +x convertitore.sh
e successivamente usare:
./convertire.sh nomefileditesto.csv
N.B. lo script deve stare dentro la directory contenente il file da convertire
Fate attenzione perchè il file originale non sara cancellato