2014-03-12 4 views
0

У меня есть небольшой пакетный файл, который объединяет два файла csv на основе совпадающих значений. Смотрите ниже код:Vwupup style csv merge using batch file

@ECHO OFF 
for /f "tokens=1 delims=, skip=1" %%i in (File2.csv) do @findstr "%%i," File1.csv >nul & If  errorlevel 0 if not errorlevel 1 (for /f "tokens=1-4 delims=," %%m in ('findstr /i /L "%%i," File1.csv') do (@echo %%1,%%2,%%3,%%4>>output.csv 
echo %%i)) 

Мой file2.csv содержит 4 столбца данных, и мой file1.csv содержит 2 столбцов данных. Столбец 1 на обоих и является уникальным значением, которое я хочу сопоставить (это имя файла, включая расширение).

Я хочу, чтобы мой вывод csv содержал все 4 столбца данных из File2.csv, плюс столбец 2 файла File1.csv, с которым он был сопоставлен.

Я бы хотел, чтобы первый столбец вывода csv был удален и заменен на этот дополнительный столбец 2 из File1.csv.

Надеюсь, я объяснил это достаточно хорошо, и я просто хотел бы знать, возможно ли это.

Любая помощь была бы принята с благодарностью!

+0

Какие данные? Полезно показать пример желаемого результата. Чтобы уточнить, сопоставьте столбцы 1 каждого файла и выведите все столбцы из файла2 + столбца 2 из файла1? –

+0

Есть ли способ загрузить файлы с примерами, которые будут проще? – user3361017

+0

Отсутствует функция загрузки native с StackOverflow, но ** [pastebin] (http://pastebin.com/) ** и ** [gist] (https://gist.github.com/) ** являются популярными. В противном случае вам нужно скопировать пасту в свой вопрос. –

ответ

0

EDIT: Измененный код в ответ на замечания

EDIT 2: Котировки в File1.csv удалены

Файл Batch ниже предполагается следующее:

Файл1.csv:

"file name.ext","col1-2" 

File2.csv:

file name.ext,col2-2,col2-3,col2-4 

output.csv:

col1-2,col2-2,col2-3,col2-4 

.

@echo off 
setlocal EnableDelayedExpansion 

rem Load File1 as lookup table: 
for /F "tokens=1,2 delims=," %%a in (File1.csv) do (
    set "filename=%%~a" 
    set "col1_2[!filename: =_!]=%%~b" 
) 

rem Process File2: 
for /F "tokens=1* delims=," %%a in (File2.csv) do (
    set "filename=%%a" 
    for /F %%f in ("!filename: =_!") do if defined col1_2[%%f] (
     echo !col1_2[%%f]!,%%b 
    ) else (
     echo NoMatchingFilename,%%b 
    ) 
) 
+0

Предположение было достаточно близко к месту, только мне не нужна колонка 1-2 в конце выходного файла, мне просто нужно заменить имя файла в столбце a. Также мои данные не содержат заголовков, не уверены, повлияет ли это на это? – user3361017

+0

Пожалуйста, очистите этот пункт: не File1.csv или File2.csv содержат заголовки? Затем, для чего используется 'skip = 1' в' 'for'' для вашего кода? – Aacini

+0

Правильно ни один из них не содержит заголовков, и этот код был скомпилирован путем копирования и вставки битов кода вместе. Я не имею опыта в этой области и поэтому не полностью понимаю сам код. Извините за беспорядок! – user3361017