Linux Shell删除两个文件相同部分
来源:互联网 发布:朗诵配音软件 编辑:程序博客网 时间:2024/05/21 06:27
原文网址:
http://www.cnblogs.com/raceblog/archive/2011/03/24/shell-delete-comm.html
因为在面试中遇到一个这样的问题,当时模模糊糊的,没有很确定的回答出来,后来上网查了一下结果,这里总结一下。
首先描述一下这个问题:比如两个文件file1和file2,删除两个文件中共同的部分,留下两个文件中独自有的部分。在网上找到一篇解决的答案,地址在这里http://hi.baidu.com/robertoyuan/blog/item/559483c4946ed5a78226acac.html。这里提到三种方法,但是没有给具体的解释。
- 方法一:使用grep
grep命令的详细使用方法,可以参考man,这里有一个简单实用的介绍:http://linux.ccidnet.com/art/3067/20070313/1035613_1.html。在方法一中,用到了两个参数。参数-v,表示invert match,即反向匹配,输出没有匹配上的项。参数-f,表示从文件中读取匹配模板(pattern)。方法一中的前一部分,在文件file1中匹配模板,来反向匹配文件file2中的内容,即输出文件file2中,在file1中没有的内容。后面的一部分同理可得,输出文件file1中,在file2中没有的内容。
- 方法二:实用comm
这个方法看起来最简单。命令comm的功能就是,逐行比较两个排好序的文件,默认输出有三列:只在file1中有的行、只在file2中有的行、在file1和file2中共有的行。有参数-1 -2 -3,分别来抑制输出对应的列。例如在我们的方法二中,实用-3参数,不输出file1和file2中共有的部分。即能达到我们本文的目的。
但是注意到,comm比较排好序的两个文件,comm在处理文件的时候,首先要查看文件是否有序,例如file1和file2的内容如下:
line1
line2
line3
$cat file2
line0
line1
line3
line2
调用前面方法二的命令的时候,就会提示file2文件时无序的,输出的结果如下:
line0
line2
comm: file 2 is not in sorted order
line2
如果使用--nocheck-order参数,不进行有序性检测,结果如下:
line0
line2
line2
从这个结果中我们可以看到,这还是不是我们真正想要的结果。这里可体现comm的另一个特征,就是逐行比较。它是对file1和file2进行逐行往下的比较,检测是否相同。所以,在用comm的时候,要根据具体的情况进行分析了。
- 方法三:使用awk
或者:
awk '{print $0}' file1 file2 |sort|uniq -u
awk命令的使用,听牛人说可谓博大精深,我也没有太搞清楚。这里只是使用了一些简单的功能。下面以我自己的理解来解释一下上面的shell代码。awk就是文本的解释器和过滤器。awk把每一行看成是一个记录(record),每个记录使用分隔符(默认是空格)把每条记录分成若干域。awk内置参数$0表示整行,$1、$2...分别表示各域,内置参数NR,表示记录的计数,awk '{print NR, $0}' file1 file2表示依次读取file1 file2,打印出每行,并且在前面添加行号。
命令sort,就是对行进行排序,参数-k表示根据各行的第几个参数关键字开进行排序,这里的-k2表示根据第二个关键字开始进行排序。
命令uniq,进行报告或者忽略重复的行,参数-u,表示只是打印出唯一的行(unique lines),-f表示忽略的每行的前n个域的比较。
参考网址:
http://hi.baidu.com/robertoyuan/blog/item/559483c4946ed5a78226acac.html
http://linux.ccidnet.com/art/3067/20070313/1035613_1.html
- Linux Shell删除两个文件相同部分
- Linux Shell删除两个文件相同部分
- Linux Shell删除两个文件相同部分
- Linux系统下比较两个文件并删除相同部分
- 找出删除两个文件相同部分Linux_grep,comm,awk
- 【shell】比较两个文件是否相同
- Linux下通配符批量删除相同文件
- linux 删除所有后缀名相同的文件
- Shell 命令行求两个文件每行对比的相同内容
- 【Bash脚本】删除两个目录下相同的文件
- Ubuntu 删除两个文件夹下相同文件名的文件
- linux删除文件的shell
- Shell-Linux批量删除文件
- Shell-linux批量删除文件
- linux 定时删除文件shell
- Ubuntu下删除两个文件夹下相同文件名且相同内容的文件(分色排版)
- linux 统计两个文件中相同或不同的行
- Linux md5sum比较两个文件夹下面文件是否相同
- mysql的order by,group by和distinct优化
- hdu 1007 最近点对问题(Splay解法)
- 结构体
- hdu4496 D-City
- 使用use index优化sql查询
- Linux Shell删除两个文件相同部分
- 130823创建函数
- 对mysql explain讲的比较清楚的
- 我的存储第一战:PM8001驱动分析(一)
- hdu 1019 Least Common Multiple
- 对拍程序
- 算法导论10.2-7答案
- u-boot移植五部曲第一个步骤
- RegularExpression note