Shell系列(7) - sort命令

195 阅读3分钟

「4月日新计划更文活动」

sort命令

  • 排序文本
  • 检查文件是否已经排序
  • 合并文件
sort [option]... [file]...

命令参数

  • option:表示sort命令的选项
    • -b:忽略前导空格或者制表符,找出第一个非空格字符。
      • -c:测试文件是否已经排序。
      • -d:根据字典顺序排序。该选项仅比较数字、字母和空格等字符。
      • -f:忽略大小写。将小写字母转成大写字母后参与比较。
      • -i:仅仅比较可打印字符。
      • -n:根据算术值进行比较,参与比较的字符有空格、十进制数字,以及减号等。如果对非数值字符进行算术值比较,将会产生无法预知的结果。
      • -R:根据哈希值随机排序。
      • -r:颠倒排序结果。
      • -k:定义排序关键字。
      • -m:仅仅合并已经排好序的文件,不执行排序操作。
      • -o:将排序结果写入文件,而不是标准输出设备。
      • -t:指定字段分隔符。默认值为空格。
      • -u:删除重复的行,只保留第一个。

栗子🌰

  • 首先我们可以有创建一个文件,如下:
[root@master1 ~]# cat demo.txt
Toy_Story                 HK           239          3972
The_Hill                  KL           63           2972
Star_Wars                 HK           301          4102
Boys_in_Company_C         HK           192          2192

将文件按照字典序排序

  • sort会将整个文本行作为关键字进行排序,其排序规则是首先比较第1列,如果第1列的值相同,则比较第2列,依此类推,直至比较完所有的列。如果所有的列都相同,则判定这些行是重复的行。
  • 语句格式sort filename
# 使用默认选项对文件排序
# 将输出结果保存到文件
sort demo.txt >demo_test.txt
# 显示排序结果
cat demo_test.txt

将文件使用单个关键字排序

  • 语句格式sort -k pos1[,pos2]
  • 参数说明pos1表示排序关键词的起始位置,pos2表示排序关键词的结束位置,两者之间用逗号隔开
特殊用法
  • 语句格式sort -k pos
  • 说明:特殊情况下忽略终止列,只保留起始列,就可用上面的语法
注意:
  • 列号从1开始
  • sort命令中,一个文本行最多只能包含10列
# 通过第三例和第四列排序
# sort 命令会将列的值作为字符串来排序
sort -k 3,4 demo.txt >demo_example.txt
# 显示排序结果
cat demo_example.txt 

将文件按照数值大小排序

  • 准备一个数字文件,如下:
[root@master1 ~]# cat num.txt
3972
2972
4102
2192
  • 语句格式sort -n filename
  • 用途:选项是按照数值大小排序
# sort -n选项是按照数值大小排序
# 将输出结果保存到文件
sort -n num.txt >demo_num.txt
# 显示排序结果
cat demo_num.txt

将结果输出到指定文件中

  • 语句格式sort -n -o 新文件 排序文件
# sort -n选项是按照数值大小排序
# sort -o指定了输出文件
# 将输出结果保存到文件
sort -n -o demo_num.txt num.txt 
# 显示排序结果
cat demo_num.txt