首页
登录 | 注册

Linux过滤器2:比较和抽取

1.比较文件:cmp,comm,diff,sdiff

1.1比较任意两个文件:cmp
    语法:cmp file1 file 2
    cmp逐个字节比较两个文件,可比较任何类型的文件。若两文件无差别,cmp不做任何处理,若又差异cmp显示且只显示第一个又差异的字节的位置。

1.2比较有序文本文件:comm
    语法:com [-123] file1 file2
    comm逐行地比较两个有序的文本文件,该程序相较于cmp,能够查看两个文件之间的区别,结果以3列显示:第一列包含只在第一个文件中有的行,第二列只在第二文件中有的行,第三列是共有的行。可以通过-1,-2,-3分别抑制各列的输出。 
    comm虽然可以查看两个文件之间的区别,但是它有两个很大的限制:首先,comm输入的两个文件必须是有序的,但很多情况文件都是无序的,如脚本或论文等。其次,comm无法显示差异的地方在文件的什么位置,不利于大文件的比较。

1.3比较无序文本文件:diff
    常规语法:diff fille1 file2
    diff能既可比较无序文件,又能比较大的文件,应用相当广泛,但其输出的结果看起来有点复杂,需要一定的练习去习惯,下面简单介绍diff常规输出结果的特点。
    diff的常规输出基于一个前提,就是如何将file1转变成file2。它的输出又三个指示符:c(change,改变),d(delete,删除),a(append,追加)。另外,每行中的<字符表示该行是第一文件的行,>表示该行是第二个文件的行。每一次的差异比较用两字符---隔开。下面用个具体的输出结果来说明:
5c5,6
< kds 
---
> #rys
> #kds 
9d9
< line=str(line)
28a29
> ##hello kitty
    从字面上讲,将第一个文件转换成第二个文件应该遵循:将一个文件的第5行修改成第二个文件的第5、6行;删除第一个文件的第9行;将第二个文件的29行追加到第一个文件的28行。
    完整语法:diff [-bBiqswy] [-c|-Clines|-u|-Ulines] file1 file2
    -i(case insensitive,不区分大小写);-w(whitespace,空白符)选项忽略所有的空白符(空格和制表符);-b选项不忽略所有的空白符,只忽略空白符数量上的区别;-B(blank lines,空白行)忽略所有的空白行;-q(quiet,静止)文件不同时,省略所有的细节,只显示不同;-s(same,相同)当两个文件相同时表示两个文件相同(如file1 and file2 are identical,正常时不宣示任何内容的)。另外diff还提供了-c(context,上下文关系),-u(unified output,统一输出)和-y三个选项来改变diff的输出格式,类似于下述的sdiff格式,感兴趣的可以man(diff)看一下。

1.4 并排比较输出:sdiff
        语法:sdiff [-bBilsW] [-w columns] file1 file2,columns时列宽。
    sdiff(side-by-side diff)是并排显示两个文件的区别,-bBi选项和diff的意义相同。-l选项表示当两个文件拥有共同行时,只显示左边的列;-s表示不显示共同的行;-w选项是改变每行显示的最大字节宽大,避免每行显示的长度太长。



2.抽取文件内容:cut,colrm,paste,join
    2.1抽取数据列:cut,colrm
cut程序从数据中抽取指定列并将其他内容抛弃,而colrm相反,它是从数据中删除指定列并保存其他内容。两者相似,以cut为例说明。
    语法:A. cut -c list [file...]        B. cut -f list [-d delimiter] [file...]  delimiter是定界符,如‘;’等。
    A语法是指定抽取某列或某几列的字节,list可以是1或1,5,6或3-6。B语法是根据定界符,抽取某个或某些字段,cut只允许定界符为一个字符,默认情况下是制表符。

    2.2组合数据列:paste
    语法:paste [-d char...] [file...],char 是分隔符的字符,可以是一个或多个,多个时,分隔符交替出现。
    注意与cat比较,paste是水平组合数据,而cat垂直组合数据(cat>>)。




    



相关文章

  • iptables此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.  .语法 iptables [-t table]  -I  chain [rulenum]  rule-spe ...
  • 作者: hspiritl  出自: http://www.linuxdiyf.com 最近一直忙5V的网站迁移,以前在win下面用mysql还没有发现有什么问题,到Linux之后才发现好多都不一样,到今天为止可以说网站的迁移基本结束了.To ...
  • https://www.linuxidc.com/Linux/2011-09/42174.htm //my_joystick.c #include #include #include #include #include #include # ...
  • 原文地址:Linux内核对per-cpu变量的实现 作者:MagicBoy2010 在Linux中,per-cpu变量用在多处理器系统中,用来为系统中的每个cpu都生成一个变量的副本,以避开多处理器互斥中的加锁问题,另一个是cpu本地的变量 ...
  • Linux基础优化与安全归纳总结 一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性.本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事.同行高手咨询,针对L ...
  • 一,安装clamav 根据系统的不同,用不同的命令,yum,pacman等.如果找不到包的话,只有下源码自己编译了. freshclam 三,查看一下clamav进程 四,一些常规用法举例 2,将扫描结果存放到log中,clamscan - ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号