Відповіді:
Вам знадобиться більше, ніж 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
або (видаліть заголовок з усіх файлів, імена яких починаються з "файл"):
awk 'FNR > 1' file*.csv > bigfile.csv
tail -n+2
, tail +2
не вийшло
Я погоджуюсь з головною відповіддю, але пропоную поширити її за наступним сценарієм (оскільки я не можу коментувати):
Якщо ви хочете, щоб вихідний файл містив заголовок (один раз), правильний сценарій:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR представляє номер оброблюваної записи в одному файлі. І NR представляє це у всьому світі, тому перший рядок приймається, а решта ігнорується, як і раніше.
Ви також можете використовувати групу команду ( { ; }
) замість заміни процесу ( <()
):
{ head -n1 file1.csv; for f in file*.csv; do tail -n+2 "$f"; done; } > new.csv
Він також працює з закінченнями рядків CRLF до тих пір, поки файли закінчуються порожнім рядком ( \r\n
).
POSIX 1003.1-2001 застаріли лише чисельні версії для голови та хвоста, які застаріли, і в деяких умовах вони отримують попередження.
Потрібно об'єднати два великих CSV-файли з однаковими стовпцями у більші CSV-файли для створення сценарію (дані не мають унікальних ідентифікаторів).
Перший взяв заголовок другого csv
awk 'FNR > 1' file2.csv > file2_noheading.csv
Далі, об'єднавшись через наступне
cat file1.csv file2_noheading.csv > newfile.csv
Використання вищезгаданої командної послідовності призвело до вигляду такого файлу:
header,of,csv1
contents,of,csv1
==> csv2.csv
contents,of,csv2
Щоб зробити це правильним CSV, з одним рядком заголовка та всіма відповідними значеннями, я застосував наступний sed
заклик ...sed -ie "/^$/d;/^==>/d" bigfile.csv
Простіше рішення, якщо у вас є тонна файлів:
awk 'FNR > 1' *.csv > merged.csv
Просто поверніться, щоб відредагувати великий файл і додати заголовок.
awk 'FNR > 1' file*.csv > bigfile.csv
? Це не!
file
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv