[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]求指导 批处理实现两文本对比问题

本帖最后由 pyhouse 于 2015-3-16 23:22 编辑

两TXT 文件
A 文件内容:   
aaaaaaaa
bbbbbbbb
cccccccccc

B文件内容:
bbbbbbbb
cccccccccc
dddddddd
eeeeeeee

想把B中内容补充到A中,想到的方法是提取 A中最后一行,在B中定位,再将定位后面的行提取出来,再echo >>进A里,但不知道如何编写,请高手指点,感谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 CrLf 于 2015-3-16 01:41 编辑

试试
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do set "n=%%a"
  3. for /f "delims=[]" %%a in ('find /n ^"%%n:"=""%%"^<b.txt') do more +%%a b.txt >>a.txt
复制代码

TOP

回复 1# pyhouse
以你的思路编的代码
  1. @echo off
  2. for /f "delims=" %%a in ('type "a.txt"') do set "laststr=%%a"
  3. for /f "tokens=1* delims=:" %%b in ('findstr /r /n /c:"%laststr%" "b.txt"') do set "n=%%b"
  4. echo.>>"a.txt"
  5. >>"a.txt" more +%n% "b.txt"
  6. pause
复制代码

TOP

回复 3# pcl_test


    这里用 find 稳妥一些,还有,最好考虑到 %laststr% 中含有特殊字符的情况

TOP

回复 4# CrLf
感谢指正

TOP

这个问题怎么用gawk和sed来解决呢?

TOP

回复 6# 愤怒的CMD
  1. gawk "NR==FNR{a[$0]=$0;print}NR>FNR{if(!($0 in a))print}" a.txt b.txt > c.txt
复制代码
1

评分人数

TOP

回复  愤怒的CMD
DAIC 发表于 2015-3-16 11:15


请问一下,如果B文件中匹配行下面的行中还有与A文件中相同的,但是又想一起输出怎么写呢?
即B文件为
  1. bbbbbbbb
  2. cccccccccc
  3. dddddddd
  4. eeeeeeee
  5. aaaaaaaa
  6. bbbbbbbb
复制代码
想要输出
  1. aaaaaaaa
  2. bbbbbbbb
  3. cccccccccc
  4. dddddddd
  5. eeeeeeee
  6. aaaaaaaa
  7. bbbbbbbb
复制代码

TOP

回复 8# 愤怒的CMD

使用diff:
  1. awk "{print}" A>C && diff -u C B|sed -n "4,$s/^+//p" >>C
复制代码
C即为想要的结果文件。
2

评分人数

TOP

回复 9# tigerpower

谢谢帮助。只能用这个辗转的方法吗?

TOP

回复 1# pyhouse
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html

TOP

借鉴坛友的纯 sed 方案:
  1. @sed -n "$=" a.txt|sed "s/.+/1,&d/"|sed -f - b.txt>>a.txt
复制代码

TOP

返回列表