Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114536
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-31 21:51
个人简介

諸惡莫做,眾善奉行,自淨其意!

文章分类

全部博文(28)

文章存档

2018年(1)

2017年(3)

2015年(3)

2014年(21)

我的朋友

分类: LINUX

2014-10-03 10:54:30

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>>)。




    


阅读(1340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~