排序去重计数( 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
实时监控。
可以自己建个文本文件,多试几次就能熟练啦~