免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4839 | 回复: 18

[文本处理] [求思路]关于文件目录结构相似度分析 [复制链接]

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2013-10-28 11:27 |显示全部楼层
本帖最后由 damcool 于 2013-10-28 11:32 编辑

现有:有两个文件分别存放对应目录下的所有文件和文件夹列表,如下:
  1. cat dir1.txt
  2. /dir1/
  3. /dir1/a.txt
  4. /dir1/a/
  5. /dir1/b.txt
  6. /dir1/b/
  7. /dir1/c/1/
复制代码
目录都是以"/"结尾,文件则否
定义:
[相似度]
dirA与dirB的相似度为DirA与dirB下目录/文件匹配数目和该目录下文件/目录数目总和的百分比。例如:
DirA下有100个文件或目录/DirB下有150个,但相同目录文件个数为20个,则我们说DirA20%相似于DirB,反之DirB13.33%相似于DirA。
[匹配]
DirA下某个文件或目录与DirB匹配的定义为除了DirA与DirB,余下的目录或文件路径一模一样。例如:
/DirA/A.txt匹配/DirB/A.txt
/DirA/B/A.txt匹配/DirB/B/A.txt
/DirA/A/B/匹配/DirB/A/B/
求解:输入两文件后按相似程度从大到小输出所有目录,例如:
DirA 100% similar to DirB



论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
发表于 2013-10-28 11:53 |显示全部楼层
回复 1# damcool


    "有两个文件分别存放对应目录下的所有文件和文件夹列表"
    上面你只列出了一个文件,我们去哪找文件对比呢,麻烦把另外一个文件也贴出来

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2013-10-28 11:57 |显示全部楼层
代号:军刀 发表于 2013-10-28 11:53
回复 1# damcool


不求代码,求思路。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-10-28 12:17 |显示全部楼层

杈撳叆涓や釜鏂囦欢(鏂囨湰鏂囦欢)姣旇緝鐨勪笉鏄?繖涓や釜鏂囦欢瀵瑰簲鐨勪袱涓?洰褰曠殑鐩镐技搴﹀悧?灏变竴涓?粨鏋

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-10-28 12:34 |显示全部楼层
你的问题是否实质上是比较两个文本文件的相似度?
是的话用awk:对文件一按行(要做些处理,应为你的意思
每行的第一个/要去掉)做下标建立数组,在文件2上判断每行是否已作为数组下标建立过数组,是的话设个变量自增+1。最后变量/文件1的行数。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2013-10-28 13:06 |显示全部楼层
给个思路。
1. 放弃这两个文件,直接用find 命令给出类似结果
2. 最好 find 带 -maxdepth 1
  1. find  $dirA -type d |while read dir
  2. do
  3.     find $dir -type f -maxdepth 1 -exec md5 {} \; # 得到dirA一个子目录的文件列表及md5码
  4.     处理 $dir, 替换成 dirB 的路径,比如得到dirB
  5.     find $dirB -type f -maxdepth 1 -exec md5 {} \; # 得到dirB该目录的文件列表及md5码
  6.     两者文件名比较,以及md5比较,找出相同文件的数目
  7.     算出百分比,输出。
  8. done
复制代码

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2013-10-28 13:27 |显示全部楼层
rdcwayx 发表于 2013-10-28 13:06
给个思路。
1. 放弃这两个文件,直接用find 命令给出类似结果
2. 最好 find 带 -maxdepth 1

首先,不能在目标主机上运行上述命令
其次,目录在两台或多台主机上
最后,即使同名文件MD5可能不同,因为内容没说一定相同。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2013-10-28 13:30 |显示全部楼层
cao627 发表于 2013-10-28 12:34
你的问题是否实质上是比较两个文本文件的相似度?
是的话用awk:对文件一按行(要做些处理,应为你的意思
...

模糊的想法类似你的建议,不过仔细想想好像还是有问题。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2013-10-28 14:05 |显示全部楼层
本帖最后由 rdcwayx 于 2013-10-28 16:08 编辑

如果a , b 是两台服务器的目录文件列表,目录是一样的话, 可以试试看着这个。 如果目录也是不一样的话,你再改改。

思路是,

1. 先将文件a的文件存在数组a里,同时记录相同目录的文件数到数组b
2. 再判断文件b中的文件是否存在于数组a,得到数组c。 同时记录相同目录的文件数到数组d
3. 输出  c[1]/b*100 和 c/d*100 就是 a对b, 和 b对a 的相似度

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2013-10-28 14:08 |显示全部楼层
回复 4# cao627


    什么情况?乱码了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP