Board logo

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

作者: pyhouse    时间: 2015-3-16 00:05     标题: [已解决]求指导 批处理实现两文本对比问题

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

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

B文件内容:
bbbbbbbb
cccccccccc
dddddddd
eeeeeeee

想把B中内容补充到A中,想到的方法是提取 A中最后一行,在B中定位,再将定位后面的行提取出来,再echo >>进A里,但不知道如何编写,请高手指点,感谢!
作者: CrLf    时间: 2015-3-16 01:39

本帖最后由 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
复制代码

作者: pcl_test    时间: 2015-3-16 01:40

回复 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
复制代码

作者: CrLf    时间: 2015-3-16 01:43

回复 3# pcl_test


    这里用 find 稳妥一些,还有,最好考虑到 %laststr% 中含有特殊字符的情况
作者: pcl_test    时间: 2015-3-16 01:45

回复 4# CrLf
感谢指正
作者: 愤怒的CMD    时间: 2015-3-16 09:14

这个问题怎么用gawk和sed来解决呢?
作者: DAIC    时间: 2015-3-16 11:15

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

作者: 愤怒的CMD    时间: 2015-3-16 11:52

回复  愤怒的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
复制代码

作者: tigerpower    时间: 2015-3-16 14:40

回复 8# 愤怒的CMD

使用diff:
  1. awk "{print}" A>C && diff -u C B|sed -n "4,$s/^+//p" >>C
复制代码
C即为想要的结果文件。
作者: 愤怒的CMD    时间: 2015-3-16 15:12

回复 9# tigerpower

谢谢帮助。只能用这个辗转的方法吗?
作者: pcl_test    时间: 2015-3-16 18:46

回复 1# pyhouse
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: CrLf    时间: 2015-3-16 19:04

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





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