+ -
当前位置:首页 → 问答吧 → 求教一个文件比较的问题

求教一个文件比较的问题

时间:2011-05-15

来源:互联网

有两个文件,其中一个记录的是/data下的全部文件路径,另一个是记录/data下今天有修改过的文件的路径。
现在的要求是这样的:我要比较这两个文件,然后输出没有被修改的文件的路径。用shell写。

麻烦大家看清楚我的提问,不要随便回答用diff或者comm比较命令。当然,如果有高手能用这两个命令输出我要的结果,而不是输出不同的内容,也行。
在此先一并表示感谢。。。

作者: zhnghaijin   发布时间: 2011-05-15

回复 zhnghaijin

为什么comm不行?
难道"/data下的全部文件路径"减去"/data下今天有修改过的文件的路径"不等于"没有被修改的文件的路径" ?

作者: ywlscpl   发布时间: 2011-05-15

回复 ywlscpl


    呵呵,我不清楚comm怎么实现。我提问里面那么说是担心大家直接回答用comm。你能说的具体一些吗?因为我不知道用comm怎么才能得到我需要的输出。我这边用comm比较的话,它是输出对比内容,而不是单纯的输出 今天没有被改变的文件的路径。

作者: zhnghaijin   发布时间: 2011-05-15

回复 ywlscpl


    是否为 comm -3 file1 file2 ?

作者: zhnghaijin   发布时间: 2011-05-15

回复 zhnghaijin


    就是这样!

作者: zhnghaijin   发布时间: 2011-05-15

回复 zhnghaijin
  1. [ywlscpl@freebsd ~]$ cat a
  2. 1/2/3
  3. a/b/c
  4. d/e
  5. 5/6
  6. [ywlscpl@freebsd ~]$ cat b
  7. a/b/c
  8. 5/6
  9. [ywlscpl@freebsd ~]$ comm -23 <(sort a) <(sort b)
  10. 1/2/3
  11. d/e
复制代码


QUOTE:
Comm命令  

如果想对两个有序的文件进行比较,可以使用comm命令。  

语法:comm [- 123 ] file1 file2  

说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。  

选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行;comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;comm - 123则什么也不显示。  

作者: ywlscpl   发布时间: 2011-05-15