基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

QUOTE:
" 实用的分类(s o r t)操作。
" uniq。
" join。
" cut。
" paste。
" split。




sort用法
s o r t命令选项很长,下面仅介绍各种选项。

选项
s o r t命令的一般格式为:
 

  1. sort -cmu -o output_file [other options] +pos1 +pos2 input_files



下面简要介绍一下s o r t的参数:

 

QUOTE:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。




其他选项有:

 

QUOTE:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。




保存输出
- o选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到r e s u l t s . o u t:

  1. $sort video.txt >results.out



启动方式
缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- t选s o r t执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等
;如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。

下面是文件v i d e o . t x t的清单,包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号。为此对此例需 使用‘ - t’选项。文件如下:

  1. [sam@chenwy sam]$ cat video.txt
  2. Boys in Company C:HK:192:2192
  3. Alien:HK:119:1982
  4. The Hill:KL:63:2972
  5. Aliens:HK:532:4892
  6. Star Wars:HK:301:4102
  7. A Few Good Men:KL:445:5851
  8. Toy Story:HK:239:3972



sort对域的参照方式
关于s o r t的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。s o r t也可以使用整行作为分类依据。

文件是否已分类
怎样分辨文件是否已分类?如果只有3 0行,看看就知道了,但如果是4 0 0行呢,使用s o r t - c通知s o r t文件是否按某种顺序分类。
 

  1. [sam@Linux_chenwy sam]$ sort -c video.txt
  2. sort: video.txt:2: disorder: Alien:HK:119:1982


结果显示未分类,

现在将之分类,再试一次:

  1. [sam@Linux_chenwy sam]$ sort -t:  video.txt >video2.txt
  2. [sam@Linux_chenwy sam]$ sort -c video2.txt
  3. [sam@Linux_chenwy sam]$


返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。

基本sort
最基本的s o r t方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果

  1. [sam@Linux_chenwy sam]$ sort -t: video.txt
  2. A Few Good Men:KL:445:5851
  3. Alien:HK:119:1982
  4. Aliens:HK:532:4892
  5. Boys in Company C:HK:192:2192
  6. Star Wars:HK:301:4102
  7. The Hill:KL:63:2972
  8. Toy Story:HK:239:3972



sort分类求逆
如果要逆向s o r t结果,使用- r选项。在通读大的注册文件时,使用逆向s o r t很方便。下面是按域0分类的逆向结果。

  1. [sam@Linux_chenwy sam]$ sort -t: -r video.txt
  2. Toy Story:HK:239:3972
  3. The Hill:KL:63:2972
  4. Star Wars:HK:301:4102
  5. Boys in Company C:HK:192:2192
  6. Aliens:HK:532:4892
  7. Alien:HK:119:1982
  8. A Few Good Men:KL:445:5851



按指定域分类
有时需要只按第2域(分类键1)分类。这里为重排报文中供应区代码,使用t 1,意义为按分类键1分类。下面的例子中,所有供应区代码按分类键1分类;注意分类键2和3对应各域也被分类。

  1. [sam@Linux_chenwy sam]$ sort -t: +1 video.txt
  2. Alien:HK:119:1982
  3. Boys in Company C:HK:192:2192
  4. Toy Story:HK:239:3972
  5. Star Wars:HK:301:4102
  6. Aliens:HK:532:4892
  7. A Few Good Men:KL:445:5851
  8. The Hill:KL:63:2972


前几个第二域都是HK,第三域:119,192,301,489,532,63,按第一个数字分了,因此必须指定多域及数值域

数值域分类
依此类推,要按第三分类键分类,使用t 3。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按年租金分类命令及结果:

阅读全文>>

你可能感兴趣的:(基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split))