Мне нужно объединить несколько файлов .CSV (используя cat
команду), но без копирования заголовка для каждого файла.
Как лучше всего выполнить эту задачу?
Вам понадобится больше, чем cat
команда, как описано здесь :
Скажем , у вас есть 3 CSV-файлов: file1.csv
, file2.csv
, и file3.csv
и хотите присоединиться к ним , чтобы bigfile.csv
и ваш заголовок всегда (только) в первой строке, а затем использовать
либо (сохранить заголовок из первого файла "file1.csv"):
cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
или (удалить заголовок из всех файлов, имена которых начинаются с "file"):
awk 'FNR > 1' file*.csv > bigfile.csv
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
tail -n+2
,tail +2
не будет работатьЯ согласен с верхним ответом, но предлагаю расширить его следующим сценарием (так как я не могу комментировать):
Если вы хотите, чтобы выходной файл содержал заголовок (один раз), правильный сценарий:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR представляет номер обработанной записи в одном файле. И NR представляет его глобально, поэтому первая строка принимается, а остальные игнорируются, как и раньше.
источник
Вы также можете использовать групповую команду (
{ ; }
) вместо процесса substitution (<()
):Он также работает с окончаниями строк CRLF, если файлы заканчиваются пустой строкой (
\r\n
).Только числовые версии головы и хвоста были устаревшими в POSIX 1003.1-2001, и в некоторых средах они вызывают предупреждения.
источник
Необходимо объединить два больших CSV с одинаковыми столбцами в больший CSV для фрагментированного сценария (данные не имеют уникальных идентификаторов).
Первый взял заголовок из второго CSV
Далее, объединены через следующее
источник
Используя приведенную выше последовательность команд, вы получили файл, который выглядит примерно так:
Чтобы сделать его правильным CSV, с одной строкой заголовка и всеми соответствующими значениями, я использовал следующее
sed
заклинание ...sed -ie "/^$/d;/^==>/d" bigfile.csv
источник
Простое решение, если у вас есть тонна файлов:
Просто вернитесь, чтобы отредактировать большой файл и добавить заголовок обратно.
источник
awk 'FNR > 1' file*.csv > bigfile.csv
? Это не!file