Si un fichier CSV combiné répète ses en-têtes de colonnes entre les lots, vous pouvez créer une action rapide du Finder qui conserve la première ligne et supprime les lignes suivantes qui y correspondent exactement. L'action ci-dessous écrit un fichier .cleaned.csv distinct à côté de chaque fichier sélectionné, laissant l'original intact. Elle fonctionne pour les exports CSV ordinaires où chaque enregistrement occupe une ligne ; elle n'analyse pas tous les formats CSV valides.

Ce que fera l'action rapide

Le flux de travail compare des lignes complètes, et non des champs CSV individuels. Il enregistre la première ligne comme en-tête, la copie dans la sortie, puis ignore toute ligne ultérieure identique à cet en-tête. Les autres lignes restent dans leur ordre d'origine, y compris les lignes de données répétées. C'est un choix pratique lorsque des lots exportés insèrent le même en-tête entre les enregistrements.

La méthode utilise la commande intégrée awk de macOS via l'action Exécuter un script Shell d'Automator. Apple documente à la fois la création d'actions rapides du Finder et l'ajout de scripts shell aux flux de travail Automator. Créer un flux de travail d'action rapide · Utiliser une action de script shell dans un flux de travail Automator

Créer l'action rapide du Finder

  1. Ouvrez Automator, choisissez Fichier > Nouveau, sélectionnez Action rapide, puis cliquez sur Choisir.
  2. En haut du flux de travail, définissez Le flux de travail reçoit les éléments suivants : sur fichiers ou dossiers et définissez l'application sur Finder.
  3. Recherchez Exécuter un script Shell dans la bibliothèque d'actions et faites-le glisser dans le flux de travail.
  4. Définissez Shell sur /bin/zsh et Transmettre les entrées sur comme arguments. Collez le script ci-dessous dans l'action.
for file in "$@"; do
    if [ ! -f "$file" ]; then
        printf 'Not a regular file: %s\n' "$file" >&2
        exit 1
    fi

    output="${file}.cleaned.csv"
    if [ -e "$output" ]; then
        printf 'Output already exists; skipped: %s\n' "$output" >&2
        exit 1
    fi

    temporary=$(mktemp "${file}.tmp.XXXXXX") || exit 1
    if awk 'NR == 1 { header = $0; print; next }
            $0 != header { print }' "$file" > "$temporary"; then
        if ! mv "$temporary" "$output"; then
            rm -f "$temporary"
            exit 1
        fi
    else
        rm -f "$temporary"
        exit 1
    fi
done

Enregistrez le flux de travail sous un nom tel que Supprimer les en-têtes CSV répétés. Le fichier temporaire est créé à côté de la source, puis déplacé vers le nom de sortie après le traitement. Si cette sortie existe déjà, le script s'arrête au lieu de l'écraser. L'entrée d'origine n'est jamais ciblée par l'écriture.

Exécuter l'action et vérifier le résultat

Dans le Finder, sélectionnez un ou plusieurs fichiers CSV, ouvrez le menu contextuel Actions rapides et choisissez Supprimer les en-têtes CSV répétés. Recherchez à côté de chaque source un fichier se terminant par .cleaned.csv. Ouvrez le résultat dans un éditeur de texte ou un tableur et vérifiez qu'il n'a toujours qu'un seul en-tête et que les lignes situées avant et après chaque en-tête répété restent présentes. Le flux de travail n'affiche pas de message de fin personnalisé ; un fichier qui n'a pas été produit peut signifier que la sortie existait déjà ou qu'une erreur de traitement est survenue.

La comparaison est exacte : un en-tête présentant une casse, des espaces, une ponctuation ou des guillemets différents est traité comme une ligne différente et sera conservé. Cette contrainte est délibérée ; elle évite de deviner quelles lignes font office d'en-têtes lorsque le texte du fichier varie.

Savoir quand cette méthode basée sur les lignes n'est pas adaptée

Le format CSV peut contenir des champs entre guillemets comportant des sauts de ligne intégrés. Dans ce cas, un enregistrement CSV logique peut s'étendre sur plusieurs lignes physiques, alors qu'awk traite les entrées ligne par ligne. Ce script pourrait alors confondre une ligne à l'intérieur d'un champ avec un enregistrement ou altérer le fichier. Le manuel d'awk de macOS par Apple décrit son traitement orienté ligne ; pour les CSV multilignes, utilisez plutôt un outil prenant en charge la spécificité du format de fichier CSV. Manuel awk pour macOS

Cette action rapide ne normalise pas non plus les espaces, ne supprime pas les correspondances approximatives, n'inspecte pas les noms de colonnes et ne fusionne pas les fichiers. Elle est adaptée à un nettoyage ciblé : supprimer les répétitions exactes de la première ligne physique d'exports CSV basés sur des lignes, tout en préservant le fichier source pour vérification.

Sources