Chinaunix首页 | 论坛 | 博客
  • 博客访问: 927828
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类:

2009-07-16 20:18:47

1.sort应用。将文件不同的域按照不同的列序列分类。
  有文件test:
ddd:jjj:1
aaa:bbb:2
ccc:ddd:3
bbb:bbb:4
aaa:ccc:5
eee:bbb:1
aaa:bbb:2

-k :指定分类键
-t :指定域分隔符
-u :去除重复行
-m :合并两个分类文件
-r :逆序排列

sort默认是由低到高排序,需要由高到低排序时用-r参数就可以了。
指定分类键有两种方法:
sort -t: +2 test
sort -t: -k3 test
    这两种方法一般来说是等价的。主要跟我们的环境设置有关。我目前还不知道这个环境如何设置,所以我就用第二种方法。

 1》首先按照第二域排序,当第二域相同时按照第一域排序。
 
along@along-laptop:~/code/shell/sort$ sort -t: -k2,2 -k1,1 test
aaa:bbb:2
aaa:bbb:2
bbb:bbb:4
eee:bbb:1
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1

这里要指定结束域。否则如果第二域若相同,他不会按照第一域去排序,而是依次去按照第三,第四域排序。
比如:
along@along-laptop:~/code/shell/sort$ sort -t: -k2 -k1,1 test
eee:bbb:1
aaa:bbb:2
aaa:bbb:2
bbb:bbb:4
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1

2》-u去除重复行。
along@along-laptop:~/code/shell/sort$ sort -u -t: -k2 -k1,1 test
eee:bbb:1
aaa:bbb:2
bbb:bbb:4
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1

3》-r逆序。
along@along-laptop:~/code/shell/sort$ sort -r -t: -k3 test
aaa:ccc:5
bbb:bbb:4
ccc:ddd:3
aaa:bbb:2
aaa:bbb:2
eee:bbb:1
ddd:jjj:1
按照第三域逆序排列。

2.pos的问题。即指定关键字,主要用到的是-k选项。
比如:
along@along-laptop:~/code/shell/sort$ sort -t: -k2.2,2 -k1.2 test
aaa:bbb:2
aaa:bbb:2
bbb:bbb:4
eee:bbb:1
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1
这是按照第二域的第二个字符排序,当出现相同时就按照第一域的第二个字符排序。

3.head 和 tail

head -n 显示文件的前n行
tail -n显示文件的后n行
缺省的head和tail都是显示10行内容。
例如:
1》显示编号最大的一行:
along@along-laptop:~/code/shell/sort$ sort -r -t: -k3 test | head -1
aaa:ccc:5
首先用sort逆序排列,然后利用head提取第一行。

2》显示编号前三大的信息。
along@along-laptop:~/code/shell/sort$ sort -r -t: -k3 test | head -3
aaa:ccc:5
bbb:bbb:4
ccc:ddd:3

tail的用法和head类似。
例如:找到编号最小的一行。
along@along-laptop:~/code/shell/sort$ sort  -t: -r -k3 test | tail -1 | awk -F: '{print "编号最小的是"$1",他的编号是"$3}'
编号最小的是ddd,他的编号是1

4.-m参数:合并两个分类文件。
这里test11和test22的分类方法都是sort -t: -k2,2 -k1,1 filename
along@along-laptop:~/code/shell/sort$ cat test11
aaa:bbb:2
aaa:bbb:2
bbb:bbb:4
eee:bbb:1
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1

along@along-laptop:~/code/shell/sort$ cat test22
aaa:bbb:22
fff:nnn:21

合并后效果:
along@along-laptop:~/code/shell/sort$ sort -t: -m  test11 test22
aaa:bbb:2
aaa:bbb:2
aaa:bbb:22
bbb:bbb:4
eee:bbb:1
aaa:ccc:5
ccc:ddd:3
ddd:jjj:1
fff:nnn:21

按照已经排好序的文件,将两个文件合并。
 
阅读(2866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~