131 lines
2.5 KiB
Markdown
131 lines
2.5 KiB
Markdown
## 1、文本分析概览
|
|
|
|
Linux 中很多日志分析和数据整理工作,都依赖文本分析命令。常见工具包括:
|
|
|
|
- `wc`:统计文本信息
|
|
- `sort`:排序
|
|
- `uniq`:去重或统计重复次数
|
|
- `cut`:按列提取内容
|
|
|
|
它们经常和管道一起使用,是文本处理的基础组合。
|
|
|
|
## 2、`wc`
|
|
|
|
`wc` 用于统计文本的行数、单词数、字节数等。
|
|
|
|
### 2.1 常见选项
|
|
|
|
- `-l`:统计行数
|
|
- `-w`:统计单词数
|
|
- `-c`:统计字节数
|
|
|
|
### 2.2 示例
|
|
|
|
```shell
|
|
wc -l access.log
|
|
```
|
|
|
|
用于统计文件共有多少行。
|
|
|
|
## 3、`sort`
|
|
|
|
`sort` 用于对文本内容进行排序,默认输出到标准输出,不会直接修改原文件。
|
|
|
|
### 3.1 常见选项
|
|
|
|
- `-R`:随机排序
|
|
- `-n`:按数值大小排序
|
|
- `-h`:按人类可读格式排序,例如 `1K`、`2M`
|
|
- `-u`:排序后去重
|
|
- `-r`:逆序排序
|
|
|
|
### 3.2 示例
|
|
|
|
```shell
|
|
sort -n scores.txt
|
|
```
|
|
|
|
```shell
|
|
sort -h disk_usage.txt
|
|
```
|
|
|
|
## 4、`uniq`
|
|
|
|
`uniq` 用于去除**相邻重复行**,因此通常会先配合 `sort` 使用。
|
|
|
|
### 4.1 常见选项
|
|
|
|
- `-c`:统计每行重复次数
|
|
- `-d`:只显示重复行
|
|
- `-u`:只显示不重复行
|
|
|
|
### 4.2 示例
|
|
|
|
```shell
|
|
sort access.log | uniq -c | sort -nr | head
|
|
```
|
|
|
|
这个组合常用于统计高频内容。
|
|
|
|
## 5、`cut`
|
|
|
|
`cut` 用于按列或按字符位置提取文本。
|
|
|
|
### 5.1 常见选项
|
|
|
|
- `-d`:指定分隔符
|
|
- `-c`:按字符位置提取
|
|
- `-f`:按字段提取
|
|
|
|
### 5.2 示例
|
|
|
|
按冒号分隔提取 `/etc/passwd` 的第一列和第三列:
|
|
|
|
```shell
|
|
cut -d: -f1,3 /etc/passwd
|
|
```
|
|
|
|
## 6、常见组合用法
|
|
|
|
### 6.1 统计访问次数最多的请求来源
|
|
|
|
```shell
|
|
cut -d" " -f1 access_log | sort | uniq -c | sort -nr | head -3
|
|
```
|
|
|
|
这条命令的思路是:
|
|
|
|
- 用 `cut` 取出第一列
|
|
- 用 `sort` 排序
|
|
- 用 `uniq -c` 统计重复次数
|
|
- 再按数字逆序排序
|
|
- 用 `head` 取前 3 条
|
|
|
|
### 6.2 统计某个文件有多少行
|
|
|
|
```shell
|
|
wc -l file.txt
|
|
```
|
|
|
|
### 6.3 查看唯一用户列表
|
|
|
|
```shell
|
|
cut -d: -f1 /etc/passwd | sort -u
|
|
```
|
|
|
|
## 7、实战建议
|
|
|
|
- 只做统计:优先考虑 `wc`
|
|
- 只做排序:优先考虑 `sort`
|
|
- 去重或重复次数统计:优先考虑 `sort | uniq`
|
|
- 按列提取:优先考虑 `cut`
|
|
- 一旦涉及多步分析,优先用管道把几个命令串起来
|
|
|
|
## 8、小结
|
|
|
|
- `wc` 用于统计
|
|
- `sort` 用于排序
|
|
- `uniq` 用于去重和统计重复行
|
|
- `cut` 用于按列抽取文本
|
|
- 这几个命令经常组合使用,是日志分析和文本整理的基础工具
|