排序去重计数( sort|uniq -c、wc) 排序(sort-n -r-t.-k1,1 -k2,2 -k 3,3 -k4,4) 前十后十( head、tail ) 具体每个小白基础讲解

下面针对 Linux 中的「排序去重计数」「特定排序」「前十后十」命令进行小白级讲解,结合例子帮你理解~

一、排序、去重、计数(sort + uniq -c + wc)

这三个命令常一起使用,用于处理文本中的重复内容、统计数量等。

1. sort:给文本「排序」

作用:按行对文本内容排序(默认升序,按字符/数字顺序)。
常用参数

  • -n:按「数字大小」排序(默认按字符串排序,比如 "10" 会排在 "2" 前面,加 -n 后按数字规则排);
  • -r:倒序排序(降序);
  • -k 字段:按指定「字段」排序(字段用分隔符分开,比如用 -t, 指定逗号为分隔符,再用 -k2 按第2个字段排)。

例子
假设有个 nums.txt 文件,内容如下(未排序):

5
3
10
2
  • 直接排序(默认升序,按字符串排,这里数字简单,结果和数字排序一样):

    sort nums.txt
    

    输出:

    2
    3
    5
    10
    
  • 按数字倒序排序(从大到小):

    sort -n -r nums.txt  # -n按数字,-r倒序
    

    输出:

    10
    5
    3
    2
    

2. uniq -c:去重并「计数」

作用:去除「相邻的重复行」,并统计每行出现的次数(-c 是计数参数)。
⚠️ 注意:uniq 只能处理「相邻的重复行」,所以通常需要先 sort 排序(让重复行挨在一起),否则无法正确去重!

例子
假设有 words.txt 文件,内容如下(有重复且无序):

apple
banana
apple
apple
banana
  • 直接去重计数(错误示范,因为重复行不相邻):

    uniq -c words.txt  # 只会处理相邻的重复,这里结果不对
    

    输出(错误):

        1 apple
        1 banana
        2 apple  # 这里只有连续的2个apple被计数
        1 banana
    
  • 正确做法:先排序(让重复行相邻),再去重计数:

    sort words.txt | uniq -c  # sort先排序,再uniq -c计数
    

    输出(正确):

        3 apple  # apple出现3次
        2 banana  # banana出现2次
    

3. wc:统计「行数/单词数/字符数」

作用:统计文本的行数、单词数、字符数(默认三者都显示)。
常用参数

  • -l:只统计「行数」;
  • -w:只统计「单词数」(以空格/标点分隔的字符串);
  • -c:只统计「字符数」(包括空格、换行符)。

例子
还是 words.txt(内容5行):

wc words.txt  # 默认显示:行数 单词数 字符数 文件名

输出:

5  5 30 words.txt  # 5行,5个单词,30个字符(包括换行)
  • 只统计行数:
    wc -l words.txt  # 输出:5 words.txt
    

二、特定排序(sort -n -r -t. -k1,1 -k2,2 -k3,3 -k4,4)

这个命令专门用于排序「IP地址」或「带点的数字」(比如版本号 1.2.3),拆解如下:

参数含义:

  • -n:按数字排序(IP的每一段是数字,比如 192 是数字);
  • -r:倒序(从大到小,可选);
  • -t.:指定分隔符为「点 .」(IP用点分隔,比如 192.168.1.1 被分成4段);
  • -k1,1:按「第1段」排序(只比较第1段,到第1段结束);
  • -k2,2:第1段相同后,按「第2段」排序;
  • -k3,3:前两段相同后,按「第3段」排序;
  • -k4,4:前三段相同后,按「第4段」排序。

例子:排序IP地址
假设有 ips.txt 文件,内容:

10.0.0.1
192.168.1.100
192.168.1.20

用命令排序(按IP从大到小):

sort -n -r -t. -k1,1 -k2,2 -k3,3 -k4,4 ips.txt

输出:

192.168.1.100  # 第1段192 > 10,所以先出;第4段100 > 20
192.168.1.20
10.0.0.1

如果不用 -n,会按字符串排序(10 会排在 192 前面,因为 "10" 的第一个字符和 "192" 相同,第二个字符 0 < 9),结果就错了。

三、前十后十(head + tail)

用于快速查看文件的「前n行」或「后n行」,默认都是10行。

1. head:取「前n行」

作用:显示文件的前n行(默认10行)。
用法head -n 行数 文件名-n 可省略,直接 head -5 即前5行)。

例子
nums.txt 有5行内容,取前3行:

head -3 nums.txt  # 或 head -n 3 nums.txt

输出:

5
3
10

2. tail:取「后n行」

作用:显示文件的后n行(默认10行)。
常用用法

  • tail -n 行数 文件名:取后n行(-n 可省略);
  • tail -f 文件名:实时监控文件新增内容(比如日志文件,新增内容会自动显示)。

例子
nums.txt 取后2行:

tail -2 nums.txt  # 或 tail -n 2 nums.txt

输出:

10
2

实时监控日志(比如 app.log):

tail -f app.log  # 打开后,文件新增的内容会实时显示,按 Ctrl+C 退出

总结

  • 排序去重计数:sort 排序 → uniq -c 去重计数 → wc 统计行数/单词;
  • 特定排序(IP/版本号):用 sort -n -t. -k1,1 -k2,2 ... 按段排序;
  • 前十后十:head -n 前n行,tail -n 后n行,tail -f 实时监控。

可以自己建个文本文件,多试几次就能熟练啦~

posted on 2025-08-18 21:16  爱尔奎特‘殷’  阅读(61)  评论(0)    收藏  举报