Board logo

标题: [数值计算] 【已解决】批处理怎样查找两个文件的不同行? [打印本页]

作者: ads350668398    时间: 2015-11-8 02:07     标题: 【已解决】批处理怎样查找两个文件的不同行?

本帖最后由 ads350668398 于 2015-11-14 18:30 编辑
  1. @echo off
  2. for /f "delims=*" %%a in (22.txt) do (
  3. findstr /i "%%a" 11.txt || echo %%a>>3.txt
  4. )
  5. pause>nul
复制代码
**************************************
文件11
11 11
22 22
33 33
44 44
55 55
****************
文件22
11 11
12 35
33 33
88 4
44 44
55 55
****************
输出文件3
12 35
**************
哪个哥们帮忙 看看 哪里错了啊 谢谢
作者: ads350668398    时间: 2015-11-8 02:07

困了先睡一觉 明天 啊来
作者: 依山居    时间: 2015-11-8 04:03

要能理解你的意思也是够费劲的。
作者: B魔方大人    时间: 2015-11-8 04:28

你得明白for是干嘛的
在你代码里体现的意思是,分别读取22.txt内的每一行,然后到11.txt里查找。
这并不是匹配每一行相同与否。
作者: ads350668398    时间: 2015-11-8 08:16

不好意思 其实我是想 对比输出 不一样的行!
作者: ads350668398    时间: 2015-11-8 08:23

回复 3# 依山居
我是打算 对比两个文件11.txt和22.txt然后输出的是不相同的内容
作者: ads350668398    时间: 2015-11-8 08:31

本帖最后由 ads350668398 于 2015-11-8 08:35 编辑

回复 4# B魔方大人
解决 问题 如果有别的方法可以实现 比较输出不相同行的内容 告诉下 谢谢

另:问下 为什么输出了
12 35
而又不输出
88 4

谢谢
作者: 依山居    时间: 2015-11-8 08:35

回复 6# ads350668398


    你试试 fc
作者: ads350668398    时间: 2015-11-8 08:44

回复 8# 依山居


    不知道 FC 晕
fc不会是方翠山是意思吧#24
作者: 尘丶    时间: 2015-11-8 09:22

本帖最后由 尘丶 于 2015-11-8 09:26 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /l %%a in (1,1,50) do set /p n%%a=)<1.txt
  3. (for /l %%a in (1,1,50) do set /p m%%a=)<2.txt
  4. for /l %%a in (1,1,50) do if not !n%%a!==!m%%a! echo;!n%%a! !m%%a!
  5. pause
复制代码
fc是命令 fc /?
好像用findstr也可以,论坛有 我忘记怎么写的了
作者: 依山居    时间: 2015-11-8 10:31

  1. D:\temp>diff 11.txt 22.txt
  2. 2c2
  3. < 12 35
  4. ---
  5. > 22 22
  6. 4d3
  7. < 88 4
复制代码

作者: ads350668398    时间: 2015-11-8 10:51

感谢网友的热心 我扫后 尝试一下
作者: 依山居    时间: 2015-11-8 11:03

你当真是不能好好打字了。
作者: terse    时间: 2015-11-8 11:06

findstr /ixvg:22.txt 11.txt
作者: B魔方大人    时间: 2015-11-8 11:12

本帖最后由 B魔方大人 于 2015-11-8 11:25 编辑

回复 7# ads350668398

比较向同行内容:fc命令
举例:
fc 22.txt 11.txt

另外第二个问题,已经说的很清楚了。for读取22.txt每一行%%a,findstr搜索11.txt是否含有%%a。
而%%a,是包含空格的字符串,所以findstr会当作88or4处理。搜索88和4
详情需要自己查看findstr命令。
作者: 依山居    时间: 2015-11-8 11:13

  1. D:\temp>findstr /vg:22.txt 11.txt
  2. 12 35
  3. 88 4
复制代码

作者: ads350668398    时间: 2015-11-8 12:54

@echo off
for /f "delims=*" %%a in (11.txt) do (
findstr /i "%%a" 22.txt && echo %%a>>3.txt
)
::输出相同的行
pause>nul

输出结果:
11 11
33 33
44 44
55 55
作者: DAIC    时间: 2015-11-8 16:49

  1. grep -vxFf 1.txt 2.txt
复制代码

作者: DAIC    时间: 2015-11-8 16:52

  1. gawk "NR==FNR{a[$0]=$0}NR>FNR{if(!($0 in a))print}" 1.txt 2.txt
复制代码

作者: ads350668398    时间: 2015-11-8 22:59

fc是命令 fc /?
好像用findstr也可以,论坛有 我忘记怎么写的了
尘丶 发表于 2015-11-8 09:22



    输出结果:
22 22 12 35
44 44 88 4
55 55 44 44
55 55
作者: ads350668398    时间: 2015-11-8 23:02

回复 11# 依山居


    没有看明白 输出结果是啥啊
作者: ads350668398    时间: 2015-11-8 23:11

好吧 可能真的没有说明白
输出目的:
12 35
88 4
谢谢
作者: terse    时间: 2015-11-9 11:13

本帖最后由 terse 于 2015-11-9 11:53 编辑

回复 22# ads350668398
好吧 试试这个
参数 多打一V 换为 x
  1. findstr /ivxg:11.txt 22.txt
复制代码

作者: ads350668398    时间: 2015-11-9 11:37

本帖最后由 ads350668398 于 2015-11-9 12:22 编辑

回复 23# terse


    成功了 谢谢 多打-V 就是输出相同的么?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2