Слияние CSV с кошкой или другими методами

У меня есть CSV из разных каталогов с одним и тем же именем, и я хотел бы объединить их вместе и поместить в новый каталог с тем же именем, а затем перебрать в исходных папках.

CSV имеют одинаковую структуру из обоих источников.

Некоторое время я искал хорошее решение для этого, и мои навыки Unix/ Bash не настолько отточены для этой задачи, как я хочу, чтобы они были.

**Example**
    Source1/1.csv
    Source2/1.csv
    Output/1.csv

1 ответ

Решение

Обычно файл CSV выглядит примерно так:

file1.csv:

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3

Теперь, если у нас есть второй CSV-файл с совместимым форматом и размерами (тот же разделитель столбцов, здесь , - и такое же количество столбцов, здесь 5) и без строки заголовка, содержащей заголовки для каждого столбца, как в примере ниже:

file2.csv:

a4,b4,c4,d4,e4
a5,b5,c5,d5,e5

Затем мы можем просто объединить два файла без необходимости какого-либо преобразования:

cat file1.csv file2.csv > output.csv

Результат будет таким:

output.csv:

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5

Чтобы автоматически объединить все файлы в source1/ с одинаковыми именами файлов в source2/ (при условии, что есть только файлы CSV и что все файлы в source1/ должен также существовать в source2/), сохраняя результат в output/ с тем же именем файла, следующий однострочный Bash сделает эту работу:

for f in source1/* ; do fname="$(basename -- "$f")" ; cat -- "source1/$fname" "source2/$fname" > "output/$fname" ; done
Другие вопросы по тегам