Chinaunix

标题: 如何快速比较两个文件中指定区域内的内容是否相同 [打印本页]

作者: skyguide    时间: 2012-11-23 13:40
标题: 如何快速比较两个文件中指定区域内的内容是否相同
比如:要比较文件A中第10行到第20行之间的内容跟文件B中第100行到110行之间的内容是否一致。

我的实现:通过“awk 'NR==行号' 文件名”的方式分别取出文件A和文件B对应的行,然后比较取出的内容,比较完毕,继续取出下一行。
但测试下来,效率比较低,一个文件要好几秒,怀疑AWK取指定行时都是从第一行开始扫描,直到指定行后才返回信息,这样效率上就低多了,换了sed -n的方式,时间上也差不多,请各位帮忙看看是否有更快捷的思路?多谢。
作者: cuteorange    时间: 2012-11-23 13:45
回复 1# skyguide

   #!/bin/bash
   sed -n '10,20p' A > A.tmp
   sed -n '100,110p' B > B.tmp
   if diff A.tmp B.tmp &>/dev/null
   then
        echo same
   else
        echo different
   fi
  rm -f A.tmp B.tmp
作者: rdcwayx    时间: 2012-11-23 13:47
  1. diff <(sed -n "10,20p" fileA) <(sed -n "100,110p" fileB)
复制代码

作者: dwj19830118    时间: 2012-11-23 13:53
sed -n '10,20p' 1 > a.tmp
sed -n '100,110p' 1 > a.tmp
diff a.tmp b.tmp > diff.tmp

作者: skyguide    时间: 2012-11-23 14:12
本帖最后由 skyguide 于 2012-11-23 14:50 编辑

多谢楼上的各位,diff两个文件这个我也想到了,但是我在比较出内容的不同后,需要过滤一点,比如如果发现不同点中包含XXX,即认为这些内容还是相同的,不知道diff能否忽略某些特定字符的差异啊?
作者: dwj19830118    时间: 2012-11-23 14:18
回复 3# rdcwayx
又学了一招

   
作者: skyguide    时间: 2012-11-23 15:03
回复 3# rdcwayx


    大侠,这个放到脚本里应该怎么写,提示语法错误,多谢。
作者: kernel69    时间: 2012-11-23 16:09
学习了…… 回复 3# rdcwayx


   
作者: Shell_HAT    时间: 2012-11-23 21:22
回复 7# skyguide


    可能是你的系统不支持进程替换
作者: skyguide    时间: 2012-11-24 10:05
回复 9# Shell_HAT


额,还有这个说法,我在控制台上执行可以,放到sh脚本里就语法错误了。还以为得加转义符之类的呢

   
作者: Shell_HAT    时间: 2012-11-24 10:27
回复 10# skyguide


    把你的完整的sh脚本贴出来看看?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2