Если в объединенном CSV-файле заголовки столбцов повторяются между пакетами данных, вы можете создать быстрое действие Finder, которое сохранит первую строку и удалит последующие точно совпадающие строки. Приведенное ниже действие создает отдельный файл .cleaned.csv рядом с каждым выбранным файлом, оставляя оригинал нетронутым. Оно подходит для обычных экспортированных CSV, где каждая запись занимает одну строку; оно не выполняет полный синтаксический анализ всех допустимых форматов CSV.

Что делает это быстрое действие

Рабочий процесс сравнивает строки целиком, а не отдельные поля CSV. Он сохраняет первую строку в качестве заголовка, копирует ее в выходной файл, а затем пропускает любые последующие строки, идентичные этому заголовку. Остальные строки остаются в исходном порядке, включая повторяющиеся строки с данными. Это практичное решение в тех случаях, когда при экспорте пакетов данных между записями вставляется один и тот же заголовок.

В методе используется встроенная в macOS утилита awk через действие Automator Запустить shell-скрипт (Run Shell Script). В документации Apple описано как создание быстрых действий Finder, так и добавление shell-скриптов в процессы Automator. Создание рабочего процесса быстрого действия · Использование действия shell-скрипта в процессе Automator

Создание быстрого действия Finder

  1. Откройте Automator, выберите Файл > Новый, укажите Быстрое действие (Quick Action) и нажмите Выбрать.
  2. В верхней части рабочего процесса установите для параметра Рабочий процесс получает текущие значение файлы или папки, а в качестве программы укажите Finder.
  3. Найдите действие Запустить shell-скрипт (Run Shell Script) в библиотеке действий и перетащите его в рабочий процесс.
  4. Установите Shell на /bin/zsh, а Передавать входные данные (Pass input) — как аргументы (as arguments). Вставьте приведенный ниже скрипт в действие.
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

Сохраните рабочий процесс под понятным именем, например, Remove Repeated CSV Headers. Временный файл создается рядом с исходным, а затем переименовывается в выходной файл после завершения обработки. Если такой файл уже существует, скрипт остановится, чтобы не перезаписать его. Исходный входной файл никогда не используется для записи.

Запуск и проверка результата

В Finder выберите один или несколько CSV-файлов, откройте контекстное меню Быстрые действия (Quick Actions) и выберите Remove Repeated CSV Headers. Рядом с каждым исходным файлом появится файл с суффиксом .cleaned.csv. Откройте результат в текстовом редакторе или табличном процессоре и убедитесь, что остался только один заголовок, а строки до и после повторявшихся заголовков сохранились. Рабочий процесс не выводит специального сообщения об окончании работы; если файл не появился, это может означать, что такой файл уже существовал или произошла ошибка обработки.

Сравнение является точным: заголовок с другим регистром, пробелами, знаками препинания или кавычками будет считаться другой строкой и останется в файле. Это ограничение сделано намеренно: оно исключает необходимость угадывать, какие строки считать заголовками при различиях в тексте.

Когда этот построчный метод не подходит

Файлы CSV могут содержать поля в кавычках с встроенными символами перевода строки. В этом случае одна логическая запись CSV может занимать несколько физических строк, тогда как awk обрабатывает входные данные построчно. Из-за этого скрипт может ошибочно принять строку внутри поля за отдельную запись или нарушить структуру файла. В справочнике по awk в macOS описана именно построчная обработка; для многострочных CSV используйте специализированные инструменты с поддержкой спецификации формата. Справочное руководство по macOS awk

Это быстрое действие также не нормализует пробелы, не удаляет неточные совпадения, не анализирует имена столбцов и не объединяет файлы. Оно предназначено для узкой задачи очистки: удаления точных дубликатов первой физической строки из построчных CSV-экспортов с сохранением исходного файла для проверки.

Источники