【 sort 学习】
时间:2006-01-11 来源:sunyone
-c 检查是否已按照某种顺序排过序
例如:
文件 003.txt 被:分割成4个域
# cat 003.txt
Boys:HK:192:2192
Alie:HK:119:1982
Hill:KL:63:2972
Alie:HK:532:4892
Star:HK:301:4102
Fewd:KL:445:5851
Toyg:HK:239:3972
Boys:HK:192:2192
Alie:HK:119:1982
Hill:KL:63:2972
Alie:HK:532:4892
Star:HK:301:4102
Fewd:KL:445:5851
Toyg:HK:239:3972
以第3个域为基准排数字序,输出到文件004.txt
# sort -t: +2n 003.txt >004.txt
检查文件004.txt是否排过序,结果显示未排序
# sort -c 004.txt
sort: 004.txt:3: disorder: Alien:HK:119:1982
# echo $?
1
sort: 004.txt:3: disorder: Alien:HK:119:1982
# echo $?
1
检查文件004.txt是否以第3个域为基准排过数字序,没有输出表示已经排过序了
# sort -c -t: +2n 004.txt
# echo $?
0
# echo $?
0
下面的例子的输出更人性化一些
# sort -c 004.txt 2>/dev/null && echo "yes" || echo "no"
no
# sort -c -t: +2n 004.txt && echo "yes" || echo "no"
yes
no
# sort -c -t: +2n 004.txt && echo "yes" || echo "no"
yes
-k 指定排序的基准区域,字段值从1开始
-k 3
以 从第3个字段的第1个字符到该行末尾 为基准键排正向字典序:
# sort -t: -k3 003.txt
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
-k 2,4
以第2到第4个字段为基准键排正向字典序
-k 3,3
以第3个字段为基准排正向字典序
# sort -t: -k3,3 003.txt
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
-k 3g,3
以第3个字段为基准排正向数字序
# sort -t: -k3g,3 003.txt
Hill:KL:63:2972
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
Alie:HK:119:1982
Boys:HK:192:2192
Toyg:HK:239:3972
Star:HK:301:4102
Fewd:KL:445:5851
Alie:HK:532:4892
-k 3gr,3
以第3个字段为基准排逆向数字序
# sort -t: -k3gr,3 003.txt
Alie:HK:532:4892
Fewd:KL:445:5851
Star:HK:301:4102
Toyg:HK:239:3972
Boys:HK:192:2192
Alie:HK:119:1982
Hill:KL:63:2972
Alie:HK:532:4892
Fewd:KL:445:5851
Star:HK:301:4102
Toyg:HK:239:3972
Boys:HK:192:2192
Alie:HK:119:1982
Hill:KL:63:2972
-k 4.2,4.4
以 从第4个字段的第2个字符-第4个字段的第4个字符 为基准排正向字典序:
# sort -t: -k4.2,4.4 003.txt
Star:HK:301:4102
Boys:HK:192:2192
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
Toyg:HK:239:3972
Alie:HK:119:1982
Star:HK:301:4102
Boys:HK:192:2192
Fewd:KL:445:5851
Alie:HK:532:4892
Hill:KL:63:2972
Toyg:HK:239:3972
Alie:HK:119:1982
-k 1.4,2.2 -k 3.3gr,4.4
先以 从第1个字段的第4个字符到第2个字段的第2个字符结束的键 为基准排正向字典序,
再以 从第3个字段的第3个字符到第4个字段的第4个字符结束的键 为基准排逆向数字序:
# sort -t: -k 1.4,2.2 -k 3.3gr,4.4 003.txt
Fewd:KL:445:5851
Alie:HK:119:1982
Alie:HK:532:4892
Toyg:HK:239:3972
Hill:KL:63:2972
Star:HK:301:4102
Boys:HK:192:2192
Fewd:KL:445:5851
Alie:HK:119:1982
Alie:HK:532:4892
Toyg:HK:239:3972
Hill:KL:63:2972
Star:HK:301:4102
Boys:HK:192:2192
这个例子还不够明显,有什么好例子记得告诉偶呀!
-m 合并多个文件,不排序
# sort -m file1 file2 file3 > outfile
效率较高
BTW:在这里可以使用 -u 选项来禁止打印相同的行。
或者
BTW:在这里可以使用 -u 选项来禁止打印相同的行。
或者
# cat file1 file2 file3 | sort > outfile
效率较低
相关阅读 更多 +