假设我们有2个文件
First.txt
123
456
和Second.txt
789;123
123;def
482;xaq
我需要的是找到第二个文件中的行只包含第一列中第一个文件的条目(标记1,delim;)。 这就是我需要的:
Output.txt的
123;def
当然,
findstr /g:first.txt second.txt
将输出两行:
789;123
123;def
我知道如何将findstr和for / f混合以获得所需的输出? 谢谢!
答案 0 :(得分:2)
您可以利用findstr
的超级限制正则表达式功能,并将first.txt的每一行仅比较每行second.txt的最开头。
@echo off
for /F %%A in (first.txt) do findstr /R /C:"^%%A;" second.txt
/R
标志表示搜索字符串应被视为正则表达式。搜索字符串中的^
表示%%A
位于该行的最开头。 ;
是一个字面分号,可防止123
行在second.txt中获取1234;abcd
。
答案 1 :(得分:2)
如果第一列中的所有元素长度相同,那么简单的答案就是
findstr /b /g:first.txt second.txt
但请注意,如果first.txt
包含一行12
,那么这将匹配第二个文件中的123;abc
和 129;pqr
。
答案 2 :(得分:2)
不为每个值执行单独的findstr
并避免在行的开头部分匹配的问题,您可以尝试使用
@echo off
setlocal enableextensions disabledelayedexpansion
( cmd /q /c"(for /f "delims=" %%a in (first.txt) do echo(%%a;)"
) | findstr /g:/ /l /b second.txt
它的作用是读取first.txt
并用分隔符回显每一行。 findstr
使用/g:/
检索此输出,以使用标准输入作为要匹配的元素的来源,在行的开头将被视为文字(/l
) /b
文件中的{second.txt
}
答案 3 :(得分:0)
是CSV的常规格式。批处理中的注意事项%A变为%% A。
for /f "delims=," %A in (csv.txt) do findstr /c:"%A" file2.txt
这是输出
C:\Users\User>for /f "delims=," %A in (csv.txt) do findstr /c:"%A" csv1.txt
C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good
C:\Users\User>findstr /c:"60" csv1.txt
54,60,hi there, Bad
C:\Users\User>findstr /c:"Bad" csv1.txt
54,63,hi there, Bad
54,60,hi there, Bad
C:\Users\User>findstr /c:"55" csv1.txt
55,61,hi there, Good
两个文件的内容。
55,60
60,60
Bad,60
55,60
和
55,61,hi there, Good
54,62,hi there, Good
54,63,hi there, Bad
54,60,hi there, Bad