版权声明:guojawee https://blog.csdn.net/weixin_36750623/article/details/84228555
在Linux下,有时候需要对文本内容进行排序,例如按照字典顺序排序,按照数字排序或者按照特定列排序等等。今天我们就借助一个命令-sort来满足我们对文本排序的需求。
选项 | ||
---|---|---|
默认情况下,按照以行构成的字符串为单位,按字典顺序升序排序 | ||
-n | 按数值大小排列 | |
-r | 逆序排序 | |
-u | 去重 | |
-k | 指定列排序 | |
-t | 指定分隔符,未指定时,默认分隔符为空白 | |
以多列为依据排序 | sort -n -k 3 -k 2 test2.txt | |
按照特定列的特定字符排序 | sort -t ’ ’ -k 2.2,2.3 test2.txt | |
-m | 合并已经排好序的文本,但不会重新排序 | sort -m file1 file2 |
待处理的文件
2 google 1998
10 icbc 1984
5 tencent 1998
1 apple 1976
16 samsung 1938
以多列为依据排序,假设按照公司创建年份排序,如果年份相同,则按照公司名称排序,即分别以第三列,第二列为依据排序:sort -n -k 3 -k 2 test.txt,输出结果如下:
16 samsung 1938
1 apple 1976
10 icbc 1984
2 google 1998
5 tencent 1998
如果要按照年份降序排序,则只需加-r参数即可:sort -n -k 3r -k 2 test.txt
按照特定列的特定字符排序,假如我们想要按照公司名称的第二至第三个字符排序,可以使用下面的方式:sort -t ’ ’ -k 2.2,2.3 test.txt,输出结果如下,-k 2.2,2.3指定了按照第二列排序,并且是第二列的第二个字符开始,到第三个字符结束
16 samsung 1938
10 icbc 1984
5 tencent 1998
2 google 1998
1 apple 1976
如果是以第二个字符开始,到最后一个字符结束,则用下面的命令即可:sort -t ’ ’ -k 2.2 test.txt