1. cut
命令详解
功能
- 提取文本的指定字段(列)或字符范围。
- 适合处理 分隔符分隔的文本 (如 CSV、TSV)或 固定宽度文本。
语法
cut [选项] 文件
常用参数
参数 | 说明 |
---|---|
-d 分隔符 |
指定字段分隔符(默认是制表符 \t ) |
-f N |
提取第 N 个字段(支持逗号分隔的多个字段,如 -f1,3 ) |
-c N-M |
提取第 N 到第 M 个字符(支持范围如 1-10 ) |
-b N-M |
类似 -c ,但按字节提取(不推荐,因字符编码问题) |
示例
-
提取 CSV 文件的第2列和第4列
cut -d ',' -f2,4 data.csv
- 输入 :
id,name,age,city
- 输出 :
name,city
- 输入 :
-
提取固定宽度文本的前10个字符
cut -c1-10 fixed_width.txt
- 输入 :
abcdefghijklmnopqrstuv
- 输出 :
abcdefghij
- 输入 :
-
从日志中提取 IP 地址
cut -d ' ' -f1 access.log
- 输入 :
192.168.1.1 - - [15/Aug/2025:17:16:28 +0000] "GET / HTTP/1.1"
- 输出 :
192.168.1.1
- 输入 :
常见问题
-
为什么
cut
比awk
快?
cut
是单行处理工具,直接按字段或字符提取,无需解析正则表达式,适合简单任务。 -
如何处理多级分隔符?
若字段分隔符是空格和逗号混合,可先用tr
替换为统一分隔符:tr ' ' ',' < input.txt | cut -d ',' -f1,3
2. tr
命令详解
功能
- 字符级别的转换、删除或压缩。
- 适合处理字符替换、清理冗余字符。
语法
tr [选项] [字符集1] [字符集2]
常用参数
参数 | 说明 |
---|---|
s |
压缩连续重复字符(如多个空格变一个) |
d |
删除指定字符 |
c |
反转字符集(保留不在字符集中的字符) |
示例
-
小写转大写
tr 'a-z' 'A-Z' < input.txt
- 输入 :
hello world
- 输出 :
HELLO WORLD
- 输入 :
-
删除数字
tr -d '0-9' < input.txt
- 输入 :
abc123def456
- 输出 :
abcdef
- 输入 :
-
压缩连续空格
tr -s ' ' < input.txt
- 输入 :
This is a test
- 输出 :
This is a test
- 输入 :
常见问题
-
为什么
tr
比sed
快?
tr
是字符级操作,直接映射字符,而sed
需要逐行匹配正则表达式。 -
如何删除所有空格?
tr -d ' ' < input.txt
3. sort
命令详解
功能
- 对文本行进行排序,支持按列、数字、稳定性排序。
语法
sort [选项] 文件
常用参数
参数 | 说明 |
---|---|
-t 分隔符 |
指定字段分隔符(默认是空格或制表符) |
-k N |
按第 N 列排序(支持范围如 -k1,1 ) |
-n |
按数字排序 |
-r |
逆序排序 |
-s |
稳定排序(保留原始顺序) |
-m |
合并已排序的文件 |
示例
-
按姓名和年龄排序用户列表
sort -t ',' -k1,1 -k2,2n users.csv
- 输入 :
Alice,30,Bob,25
- 输出 :
Alice,30,Bob,25
(按姓名升序,年龄降序)
- 输入 :
-
合并两个已排序文件
sort -m file1.txt file2.txt > merged.txt
- 前提 :
file1.txt
和file2.txt
已按相同规则排序。
- 前提 :
-
统计 IP 访问量前10
cut -d ' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10
常见问题
-
如何稳定排序?
使用-s
参数确保相同键值的行保持原顺序。 -
如何按数字排序?
使用-n
参数,例如:sort -n numbers.txt
4. uniq
命令详解
功能
- 去除相邻的重复行 ,常与
sort
配合使用。
语法
uniq [选项] 文件
常用参数
参数 | 说明 |
---|---|
-c |
统计重复次数 |
-d |
仅显示重复的行 |
-u |
仅显示唯一的行 |
示例
-
统计 IP 访问量
cut -d ' ' -f1 access.log | sort | uniq -c
- 输出 :
10 192.168.1.1
(IP 出现10次)
- 输出 :
-
去除重复行
sort data.txt | uniq
-
找出重复的错误日志
sort error.log | uniq -d
常见问题
-
为什么
uniq
需要先排序?
uniq
只能去除 相邻 的重复行,因此必须先用sort
排序。 -
如何统计唯一行?
使用-u
参数:sort data.txt | uniq -u
总结对比
命令 | 核心功能 | 不可替代性 | 典型场景 |
---|---|---|---|
cut |
字段/字符提取 | 简单高效,适合大文件 | 提取日志字段、CSV列 |
tr |
字符转换/删除/压缩 | 轻量级字符操作 | 清理空格、大小写转换 |
sort |
排序/合并 | 内置高效排序算法 | 统计IP访问量、合并文件 |
uniq |
去重/统计 | 依赖排序的去重工具 | 日志去重、统计重复行 |
实际生产场景示例
1. 日志分析:统计访问量前10的 IP
cut -d ' ' -f1 access.log | sort | uniq -c | sort -nr | head -n 10
- 流程 :
cut
提取 IP 列;sort
排序;uniq -c
统计重复次数;sort -nr
按访问量倒序排序;head
取前10条。
2. 数据清洗:清理 CSV 文件
tr -s ' ' < data.csv | cut -d ',' -f1,3,5
- 流程 :
tr
压缩空格;cut
提取关键列。
3. 性能监控:提取进程内存使用率
ps aux | sort -k4 -nr | head -n 5
- 流程 :
ps
获取进程信息;sort
按内存使用率倒序排序;head
取前5个进程。
常见错误与解决方法
-
cut
提取字段时无输出-
原因:字段分隔符未正确指定(如默认是制表符)。
-
解决 :使用
-d
指定分隔符,例如:cut -d ',' -f2 data.csv
-
-
tr
无法删除字符-
原因 :未正确使用
-d
参数。 -
解决 :明确指定删除字符:
tr -d ' ' < input.txt
-
-
sort
排序结果不正确-
原因:未按数字排序(默认按字符串排序)。
-
解决 :使用
-n
参数:sort -n numbers.txt
-
-
uniq
无法去重-
原因:未先排序。
-
解决 :先用
sort
排序:sort data.txt | uniq
-