Слияние 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