新浦京81707con > 功能介绍 > 文件比较,Shell脚本对比两个文本文件找出不同行

原标题:文件比较,Shell脚本对比两个文本文件找出不同行

浏览次数:187 时间:2019-07-24

亲自试验过的秘诀如下:

率先描述一下这些难题:比如三个文件file1和file2,删除七个文本中齐声的一部分,留下八个公文中单唯有的某些。在互连网找到一篇消除的答案,地址在这里http://www.linuxidc.com/Linux/2011-05/36171p2.htm。这里涉及两种艺术,不过并未有给现实的分解。

linux相比文件输出不一样的从头到尾的经过

第一种:comm命令法

方法一:使用grep
grep -v -f file1 file2 && grep -v -f file2 file1
grep命令的详尽使用办法,能够参照他事他说加以考察man,这里有贰个轻巧易行实用的牵线:http://www.linuxidc.com/Linux/2011-05/36171p3.htm。在格局第一中学,用到了七个参数。参数-v,表示invert match,即反向相配,输出未有相配上的项。参数-f,表示从文件中读取相称模板(pattern)。方法一中的前一部分,在文书file第11中学特别模板,来反向匹配文件file第22中学的内容,即出口文件file第22中学,在file第11中学从未的剧情。后边的一片段综上说述,输出文件file第11中学,在file第22中学尚无的内容。

 

指令如下:comm -3 file1 file2

方法二:实用comm 
comm -3 file1 file2
本条方法看起来最简易。命令comm的作用就是,逐行相比三个排好序的文书,暗中同意输出有三列:只在file第11中学有的行、只在file2中一些行、在file1和file第22中学国共产党有的行。有参数-1 -2 -3,分别来防止输出对应的列。举例在我们的点子二中,实用-3参数,不出口file1和file第22中学国共产党有的一对。即能达到规定的标准我们本文的目标。
不过注意到,comm比较排好序的四个公文,comm在拍卖文件的时候,首先要翻开文件是不是有序,比方file1和file2的剧情如下:

脚下据作者所明白的有如下两种方法,来相比较七个文本的行,以出口他们的不一致之处:

有一个主题材料就算,假设三个文本排序不均等的话,会出难点

$cat file1
line1
line2
line3

 

第二种:grep命令法

$cat file2
line0
line1
line3
line2
调用前面方法二的命令的时候,就能够提示file2文件时冬天的,输出的结果如下:

1) comm mission:

指令如下:grep -vwf file1 file2

$ comm -3 file1 file2
        line0
line2
comm: file 2 is not in sorted order
        line2
假使应用--nocheck-order参数,不开始展览有序性检验,结果如下:

        comm [-123] file1 file2 [> sfile]

总计file第11中学向来不,file第22中学部分行

$ comm -3 --nocheck-order file1 file2
        line0
line2

        NOTE: file1,file2 must be firstly sorted !

切实接纳条件未来再补偿,明天先记下到这里。

        line2

        -1/2/3 means: -1 ----- rid the only retained contents in file1

你也许感兴趣的篇章:

  • PowerShell读取文本文件内定行内容的方法
  • PowerShell相比较文本文件的八个方法
  • Shell脚本逐行读取文本文件(不转移文本格式)
  • Powershell达成加密解密文件文件方式实例
  • shell文件管理笔记之插入文本到文件的方法

从这几个结果中我们得以看出,这依然不是大家实在想要的结果。这里可反映comm的另一个特点,就是逐行比较。它是对file1和file2实行逐行往下的相比较,检查测验是还是不是同样。所以,在用comm的时候,要依据现实的意况开始展览分析了。

                      -2 ----- rid the only retained contents in file2

方法三:使用awk
awk '{print NR, $0}' file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk '{print $2}'
或者:
awk '{print $0}' file1 file2 |sort|uniq -u
awk命令的行使,听牛人说可谓源源而来,作者也未有太搞领会。这里只是选用了一些简便的效力。上面以自己本人的敞亮来解释一下上边的shell代码。awk正是文件的解释器和过滤器。awk把每一行看成是叁个记下(record),各种记录使用分隔符(暗中认可是空格)把每条记下分成若干域。awk内置参数$0代表整行,$1、$2...个别表示各域,内置参数N奔驰G级,表示记录的计数,awk '{print N昂科威, $0}' file1 file2表示依次读取file1 file2,打字与印刷出每行,并且在头里增加行号。

                      -3 ----- rid the communal lines in both two files

 命令sort,正是对行进行排序,参数-k代表根据各行的第多少个参数关键字开实行排序,这里的-k2意味依照第1个重要字初叶开始展览排序。

         正如,上面说的那么,comm命令运用的前提是对准八个sorted文件!

本文由新浦京81707con发布于功能介绍,转载请注明出处:文件比较,Shell脚本对比两个文本文件找出不同行

关键词: 新浦京81707con

上一篇:新浦京娱乐场官网app:winx64安装配置方法图文教

下一篇:没有了