Linux操作命令学习笔记(八)

一、sort 命令

sort 命令是 Linux/Unix 系统中一个非常实用的文本排序工具,它可以对文本文件或标准输入(stdin)中的行进行排序,并输出排序后的结果。它支持多种排序规则,包括按字典序、数值大小、月份、随机顺序等,还能处理重复行、合并已排序文件等任务。

        1、格式:sort [参数] [文件名]

        2、常用参数

-b忽略行首空白字符
-d按字典序排序(仅考虑字母、数字和空格)
-f忽略大小写(-ignore-case
-h按人类可读的大小排序(如 2K、1G)
-k N按第 N 列排序(支持范围,如 -k 2,4
-n按数值大小排序(而非字典序)
-r逆序排序(降序)
-t 分隔符指定列分隔符(默认是空白符)
-u去重(仅保留唯一行)
-o 文件将结果输出到指定文件(可覆盖原文件)
-R随机排序(打乱顺序)
-V自然版本排序(如 1.2.3 < 1.10.0)
-m只合并多个输入文件

        3、示例:

        文件 data.txt , file.txt 和 data.csv 内容如下:

       

        (1)默认排序(字典序):

sort file.txt          # 对 file.txt 按字典序升序排序
sort -u file.txt       # 去重后排序

        (2)数值排序:

sort -n data.txt       # 按数值大小排序(如 10 > 2)
sort -nr data.txt      # 数值降序排序

         (3)按指定列排序

sort -k 3 data.txt               # 按第 3 列排序
sort -t ',' -k 2,2 data.csv      # 以逗号分隔,按第 2 列排序

        (4) 忽略大小写

sort -f data.txt      # 不区分大小写排序(如 "apple" 和 "Apple" 视为相同)

        (5)人类可读大小排序

ls -l | sort -h -k 5    # 按文件大小排序(KB/MB/GB 自动识别)

         (6)随机排序

sort -R data.txt      # 打乱行顺序

        (7) 输出到文件

sort data.txt -o file.txt  

 文件data.txt 的内容保存到了 file.txt 中了

        (8)高级用法

列出/usr/share/目录下使用空间最多的前 10 个目录文件,

du -s /usr/share/* | sort -nr | head -10

对 ls 命令输出信息中的空间使用大小字段进行排序,

ls -l /usr/bin/ | sort -nr -k 5 | head -10

 

首先根据第一列的内容对文件中的行进行排序,如果第一列的内容相同,则根据第二列的数字顺序进行次级排序。

 sort  -k 1,1  -k 2n data.txt

 

4、补充: 

        -k 参数的语法格式是 sort 命令中最复杂但也最强大的部分之一。通过灵活控制 字段(FStart/FEnd) 和 字符位置(CStart/CEnd),可以精确指定排序的范围和规则。

完整语法:

-k FStart.CStart[Modifier][,FEnd.CEnd[Modifier]]
  • FStart:起始字段(列号,从1开始)。

  • CStart:起始字段中的第几个字符(从1开始,省略则从字段开头开始)。

  • FEnd:结束字段(省略则默认到行尾)。

  • CEnd:结束字段中的第几个字符(省略或设为0表示到字段末尾)。

  • Modifier:排序规则修饰符(如 nrb 等)。

 关键概念与规则:

  • End 部分的默认行为

    • 如果省略 ,FEnd.CEnd,则 End 部分默认扩展到行尾(包括所有后续字段)。

    • 例如 -k 2 表示从第2字段开始到行尾的所有内容参与排序。

  • Start 和 End 的字符定位

    • FStart.CStart:从第 FStart 字段的第 CStart 字符开始。

      • 省略 .CStart 则从字段的第一个字符开始(如 -k 2 等价于 -k 2.1)。

    • FEnd.CEnd:到第 FEnd 字段的第 CEnd 字符结束。

      • 省略 .CEnd 或设为 0 则到字段的最后一个字符(如 -k 2,3.0)。

  • Modifier 的作用位置

    • 可以分别在 Start 或 End 部分添加修饰符(如 nr)。

    • 若只在一个部分指定,则影响整个排序键范围。

 二、uniq 命令

uniq 命令是 Linux/Unix 系统中用于过滤或检测相邻重复行的工具,通常与 sort 结合使用以处理文本数据。由于 uniq 仅能识别相邻的重复行,因此需要先对数据进行排序。

        1、格式:uniq [参数] [文件名]

        2、常用参数

-c在每行前加上表示相应行目出现次数的前缀编号
-d只输出重复的行
-u只显示唯一的行
-D显示所有重复的行
-f比较时跳过前 n 列
-i在比较的时候不区分大小写
-s比较时跳过前 n 个字符
-w对每行第 n 个字符以后的内容不作对照

        3、示例

文件data.txt 内容如下:

         (1)基本去重(需先排序,Apple 和 apple 被视为不同行)

sort data.txt | uniq

 

         (2)忽略大小写去重(Apple 和 apple 视为相同行)

sort data.txt | uniq -i

 

        (3)统计重复次数

sort data.txt | uniq -c

        (4)仅显示重复行(每组显示一次)

sort data.txt | uniq -d

         (5)仅显示唯一行(不重复的行)

sort data.txt | uniq -u

         (6)结合使用

sort -k 4.1n,4.1n data.txt | uniq -c -f 3 -w 2
  1. 排序:首先按照 student.txt 文件中第 4 个字段的第 1 个字符的数字顺序对文件中的行进行排序。

  2. 去重并计数:对排序后的结果,跳过前 3 个字段,从第 4 个字段开始比较,只比较每个字段的前 2 个字符,统计每行出现的次数,并在每行前面加上计数。

         找出/bin 目录和/usr/bin 目录下所有相同的命令

ls /bin /usr/bin  | sort | uniq -d

4、补充:

  • uniq处理的是已排序的数据,无法正确识别非相邻的重复行。
  • 若需直接修改文件,可结合重定向或 -o 选项(某些版本支持)。
  • 对大型数据集,sort | uniq 的组合可能消耗较多资源,建议先测试小样本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值