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.