一、基本用法
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
此处评论已关闭