{{tag>bash CSV CA}}
= Bash CSV
Petit script pour analyser les données d'un fichier CSV
''get_info_csv.sh''
#! /bin/bash
CSV_FILE=$1
COUNT_FIELDS=$(head -1 "$CSV_FILE" | sed -e 's/[^;]//g' | wc | awk '{print $3}')
GET_CSV_KEY() {
local -i i
i=$1
head -1 "$CSV_FILE" | cut -d';' -f"$i"
}
GET_COUNT_VALUE() {
local -i i
i=$1
sed -e 1d "$CSV_FILE" | cut -d';' -f"$i" | sort -u | wc -l
}
GET_UNIQUE_VALUE() {
local -i i
i=$1
sed -e 1d "$CSV_FILE" | cut -d';' -f"$i" | sort -u
}
for (( j=1; j<=COUNT_FIELDS; j++ ))
do
echo -n "[${j}_"
COUNT=$(GET_COUNT_VALUE "$j")
echo "$(GET_CSV_KEY "$j")]"
if [[ COUNT -lt 200 ]]
then
GET_UNIQUE_VALUE "$j"
else
echo MUL
fi
echo "-----"
done
Utilisation
source get_info_csv.sh plop.csv
# Nom / entête du champ 1
GET_CSV_KEY 1
# Nombre de valeurs différente pour le champ 1
GET_COUNT_VALUE 1
# Récupère toutes les valeurs différentes pour un champ donné
GET_UNIQUE_VALUE 4
# Nombre de champ / colonnes
echo $COUNT_FIELDS
== Autres
=== Type string vs int
Dans certains cas il est particulièrement gênant de voir le ou les zéros ne pas s'afficher. Exemple : \\
** Agent 7** \\
A la place d'**agent 007**
Pour faire interpréter (dans LibreOffice / excel..) les données numériques comme des strings et non pas comme des integer l'astuce consiste à faire précéder le chiffre par une tabulation.