Команда Windows 10 fc: сравнение файлов через запятую

545
MAK

У меня есть два файла по 3 ГБ для сравнения и сохранения данных различий в третьем файле.

Ниже приведены примеры данных.

Файл 1 : июнь_01_2018.csv

enter image description here

Файл 2 : июнь_02_2018.csv

enter image description here

Примечание : я хочу сохранить разницу в третий файл с заголовками столбцов.

Ожидаемый результат . Третий файл должен содержать записи от ID11 до 15 с заголовками столбцов.

Моя попытка : fcкоманда в командной строке,

>fc June_01_2018.csv June_02_2018.csv > June_Diff.csv 

Но получаю неожиданный результат:

enter image description here

1
Связанный: [Как сравнить два CSV-файла в Windows] (https://stackoverflow.com/q/33523362). `fc` - это интерактивный инструмент командной строки, то есть он всегда будет производить читабельный вывод. Кроме того, он сравнивает текстовые файлы построчно и не знает значения строк. В вашем случае первая строка, содержащая заголовки столбцов, идентична в обоих файлах, поэтому она не печатается. Если вы прочитаете [docs] (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/fc), вы увидите, что ваши выходные данные являются ожидаемыми. Я сомневаюсь, что `fc` - правильный инструмент для этой задачи. danzel 5 лет назад 1

1 ответ на вопрос

1
LotPings

Надежды не имеют ничего общего с (реалистичными) ожиданиями.

Заголовок точно такой же, поэтому не может быть разницы.
Кроме того, представление Excel не является CSV-файлом, вы должны опубликовать исходные файлы в виде текста.

Следующий пакетный файл читается в заголовке и отражается в diff.
Вместо fc он использует findstr с опциями

/B compare from line begin /E compare upto line end /V output lines **not** present in compared file /G: get strings from a file 

@Echo off Set "File1=June_01_2018.csv" Set "File2=June_02_2018.csv" Set "File3=June_Diff.csv"  Set /P "Header="<"%File1%" ( Echo=%Header% Findstr.exe /BEV /G:"%File2%" "%File1%" )>"%File3%" 

Вариант с фк

@Echo off Set "File1=June_01_2018.csv" Set "File2=June_02_2018.csv" Set "File3=June_Diff.csv"  Set /P "Header="<"%File1%" ( Echo=%Header% fc "%File1%" "%File2%"|more +3  )>"%File3%" 

Это оставляет только конечную линию.

Получение ошибки `FINDSTR: слишком длинная строка поиска`. MAK 5 лет назад 0
С какими размерами файлов вы имеете дело? LotPings 5 лет назад 0
Файл имеет 3 ГБ каждый. MAK 5 лет назад 0
Хорошо, что определенно превышает [findstr пределы] (https://stackoverflow.com/questions/8844868/what-are-the-undocumented-features-and-limitations-of-the-windows-findstr-comman) Вы можете использовать заголовок подход, добавьте вариант fc и настройте вывод, удалив ненужные строки, начинающиеся с `Сравнение` и` ***** ` LotPings 5 лет назад 0
Я пытался с командой fc с вашим кодом. Но получение ошибки RESYNC FAILED. Чтобы преодолеть это, я просто добавил / Lb 200000 к fc, потому что разница между двумя файлами составляет примерно 1 миллион больше или меньше записей. Сценарий все еще работает с последних 15 минут .. MAK 5 лет назад 0
Так что дело не только в том, что в новый файл добавлены записи, они также появляются в середине файла? LotPings 5 лет назад 0
Да уж! И у него есть две уникальные колонки. MAK 5 лет назад 0
Тогда я боюсь, что подход diff, основанный на текстовых файлах, не лучший метод, вам может понадобиться dbms. LotPings 5 лет назад 0
Хорошо, попробую со стороны dbms. MAK 5 лет назад 0