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
- Ouvrez Automator, choisissez Fichier > Nouveau, sélectionnez Action rapide, puis cliquez sur Choisir.
- 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.
- Recherchez Exécuter un script Shell dans la bibliothèque d'actions et faites-le glisser dans le flux de travail.
- Définissez Shell sur
/bin/zshet 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
- Créer un flux de travail d'action rapide dans Automator sur Mac — Assistance Apple
- Utiliser une action de script shell dans un flux de travail Automator sur Mac — Assistance Apple
- awk(1) — Pages de manuel macOS 13.6.5 — Pages de manuel FreeBSD