У меня есть CSVs из различных каталогов, которые имеют то же имя файла, и я хотел бы объединить их вместе и разместить их в новый каталог под тем же именем файла и затем циклично выполнить его через исходные папки.
CSVs имеет ту же структуру через из обоих источников.
Я искал хорошее решение для этого некоторое время, и мои unix/bash-skills столь не заточены для этой задачи, как я хочу, чтобы они были.
**Example**
Source1/1.csv
Source2/1.csv
Output/1.csv
Обычно файл 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