一、基本用法
sort
命令用于对文件和标准输入进行排序,默认以行为单位,根据字典序排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cat test # 测试文件 tencent 100 1000 baidu 200 500 alibaba 150 800 huawei 130 700 baidu 200 500 $ sort test # 排序 alibaba 150 800 baidu 200 500 baidu 200 500 huawei 130 700 tencent 100 1000 |
二、选项
常用选项:
-u
: 删除重复行-r
:逆序输出,默认正序-n
: 把排序字段当作数字排序-k
: 根据每行的第几列排序-t
: 每一行分割成列的切分字符
2.1 -u选项
1 2 3 4 5 |
$ sort -u test alibaba 150 800 baidu 200 500 # 重复选项已经不见 huawei 130 700 tencent 100 1000 |
2.2 -r选项
1 2 3 4 5 |
$ sort -ur test tencent 100 1000 huawei 130 700 baidu 200 500 alibaba 150 800 |
2.3 -k,-t和-n选项
-k
选项用于指定对几列进行排序,-t
作为分隔符区分多列,默认以空格作为切分字符。
1 2 3 4 5 6 7 8 9 10 11 |
$ sort -uk 2 test # 对第二列排序 tencent 100 1000 huawei 130 700 alibaba 150 800 baidu 200 500 $ sort -uk 3 test # 对第三列排序 tencent 100 1000 baidu 200 500 huawei 130 700 alibaba 150 800 |
因为sort
默认以ascii
排序的,所以对第三列排序时1000排在了500之前,如果要根据数字排序,需要使用-n
选项:
1 2 3 4 5 |
$ sort -unk 3 test baidu 200 500 huawei 130 700 alibaba 150 800 tencent 100 1000 |
为了体现-t
选项,把每行的空格替换成:
来测试:
1 2 3 4 5 6 7 8 |
$ sed -i 's/ /:/g' test $ sort -unk 3 test tencent:100:1000 # 排序结果错误 $ sort -unk 3 -t : test baidu:200:500 huawei:130:700 alibaba:150:800 tencent:100:1000 |
2.4 -k的高级用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 从第一列的第二个字符开始排序 $ sort -uk 1.2 -t : test baidu:200:500 tencent:100:1000 alibaba:150:800 huawei:130:70 # 根据第二列的第二个字符排序 # 加-u选项,第二列第二个字符相同的被冲掉了 $ sort -uk 2.2,2.2 -t : test tencent:100:1000 huawei:130:700 alibaba:150:800 # 以第二列的第二个字符排序 # 如果相同再从第一列的第一个字符开始排序 $ sort -uk 2.2,2.2 -k 1.1 -t : test baidu:200:500 tencent:100:1000 huawei:130:700 alibaba:150:800 |
评论