2015-03-31 3 views
0

Мне нужно создать командный файл, который будет делать следующее: у меня есть 2 текстовых файла без заголовков, которые мне нужно сравнить друг с другом для дубликатов в одном определенном столбце.Пакетный файл для сравнения текстовых файлов без заголовков для дубликатов

Файл 1 выглядит следующим образом:

34551897  455684   2170865488 
34668571  455674   2165586244 
34156474  456178   2156189465 
34156184  428516   2153185687 

Файл 2 выглядит следующим образом:

3415647   458566   2183154897 
3515647   168594   2156984161 
3513157   412348   2156748416 
3581354   154613   2156789131 

Мне нужно сравнить второй столбцы из файла 1 в файл 2 дубликатов, и если есть дубликат , верните нуль. Else, return a 1.

Текстовые файлы расположены на одном компьютере, но в разных папках.

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

+0

Всего несколько вопросов, чтобы прояснить некоторые вещи (я немного медленно вы видите) ... Есть ли дубликат должен быть точно то же положение во втором столбце для обоих файлов? Когда вы говорите 'возвращаете ноль. Else, верните 1. 'вы имеете в виду буквально выводят' 1' или '0' в окне командной строки? или просто подтвердить, что существует дубликат или нет? –

+0

[help/on-topic]: _Questions с просьбой о помощи в домашних заданиях должны содержать резюме работы, которую вы сделали до сих пор, чтобы решить проблему, и описание проблемы, с которой вы решаете ее. * Подсказка: обратите внимание к командам 'ECHO',' SET', 'FOR/F',' IF' и 'EXIT' в [Индекс AZ в командной строке Windows CMD] (http://ss64.com/nt/). Вернитесь сюда и отредактируйте свой вопрос, чтобы получить дополнительную помощь при возможных трудностях. – JosefZ

+0

@JosefZ Я заметил немало вопросов об этом сообществе для получения помощи, в соответствии с которой искатель указывает, что требуется, но никаких доказательств попытки сделать это или даже потенциального маршрута, о котором они могут думать, дается. Я только предполагаю, что искатель просит ответа, чтобы они могли вспять - учиться на этом ... или «учиться по сравнению», как говорят некоторые ... независимо от того, насколько я пользуюсь этими вопросами, так как я наслаждаюсь проблемой и наслаждаюсь решение, но это побеждает истинную цель; что искатель на самом деле учится и от моих усилий, а не просто для удобства использования его как средства для достижения цели. –

ответ

0

Это может помочь, если положение согласующего строки не имеет значения:

@echo off 
setlocal enabledelayedexpansion 
set count=0 

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 1.txt") do (
echo %%i 
)>>C:\TEST\temp.txt 

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 2.txt") do (
findstr /c:"%%i" "C:\TEST\temp.txt" 
if !errorlevel!==0 set /a count+=1 
) 
echo !count! match(es) 
pause 
del /q "C:\TEST\temp.txt" 

Вам нужно будет заменить пути с теми, имеющим отношение к вам. Кроме того, вы можете сделать это более эффективно вложенности в for условия:

@echo off 
setlocal enabledelayedexpansion 
set count=0 

for /f "usebackq tokens=2 delims=TAB " %%i in ("C:\TEST\test columns 1.txt") do (
    for /f "usebackq tokens=2 delims=TAB " %%j in ("C:\TEST\test columns 2.txt") do ( 
    if %%i==%%j set /a count+=1 
    ) 
) 
echo !count! match(es) 
pause 
+0

Если бы я хотел, чтобы выйти с 0 возврата, если количество было больше, чем 0, или выход с 1, если граф был = 0 будет выглядеть что-то вроде: эхо% Количество%> 0 выхода 0 echo% count% == 0 exit 1 – Brandon

+0

Включите инструкцию 'if', а также пакет' errorlevels' см. [exit] (http://ss64.com/nt/exit.html), поэтому вам нужно использовать '/ b' ... и если вы хотите запустить вторую партию в зависимости от того, как первый завершается, вам может понадобиться команда [перенаправление] (http://ss64.com/nt/syntax-redirection.html) , Удачи! –

+0

Еще раз спасибо @Chris – Brandon

Смежные вопросы