一、基本用法

sort命令用于对文件和标准输入进行排序,默认以行为单位,根据字典序排序。

$ 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选项

$ sort -u test 
alibaba 150 800
baidu 200 500  # 重复选项已经不见
huawei 130 700
tencent 100 1000

2.2 -r选项

$ sort -ur test 
tencent 100 1000
huawei 130 700
baidu 200 500
alibaba 150 800

2.3 -k,-t和-n选项

-k选项用于指定对几列进行排序,-t作为分隔符区分多列,默认以空格作为切分字符。

$ 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选项:

$ sort -unk 3 test 
baidu 200 500
huawei 130 700
alibaba 150 800
tencent 100 1000

为了体现-t选项,把每行的空格替换成:来测试:

$ 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的高级用法

# 从第一列的第二个字符开始排序
$ 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
最后修改:2018 年 03 月 16 日
如果觉得我的文章对你有用,请随意赞赏