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
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