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>>)。
阅读(1353) | 评论(0) | 转发(0) |