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
按照已经排好序的文件,将两个文件合并。
阅读(2904) | 评论(0) | 转发(0) |