Linux 的文本工具各自只完成一件小事,却可以通过管道组合成强大的处理流程。它们读取普通文本并把结果写到标准输出,因此很适合处理日志、清单和以分隔符组织的数据。
用 wc 统计
wc file.txt 依次显示行数、单词数和字节数。只需要某一种结果时,分别使用 wc -l、wc -w 或 wc -c。例如 wc -l access.log 可以快速统计日志记录数。
用 sort 排序
sort names.txt 按字符顺序排列各行;-n 按数值排序,避免把 10 排在 2 前面;-r 反向排列。两者可组合为 sort -nr scores.txt,按数值从大到小排列。
wc统计行、词和字节
sort按文本或数值排序
uniq处理相邻重复行
cut提取字段或字符
用 uniq 处理重复行
uniq 只比较相邻的行,因此通常先排序:sort names.txt | uniq。使用 uniq -c 还能在每个唯一值前显示出现次数。若忘记排序,分散在文件不同位置的重复项不会被合并。
用 cut 提取字段
对于冒号分隔的数据,cut -d ":" -f 1 /etc/passwd 提取第一个字段。-d 指定分隔符,-f 指定字段;-f 1,3 可以同时选择多个字段。
完整流水线:cut -d ":" -f 2 users.txt | sort | uniq -c | sort -nr 先提取第二列,再统计每个值的频次,并按次数从高到低排列。
互动实验
搭建城市频次流水线
访问权限免费
users.txt
users.txtalice:Shanghaibob:Beijingcarol:Shanghaidave:Shenzhenerin:Beijingfrank:Shanghai请选择第一段命令。
知识测验
题目
为什么常用 sort names.txt | uniq,而不是直接运行 uniq names.txt?
知识测验
题目
users.txt 以冒号分隔。哪个命令提取第二个字段?
动手练习
分析团队名册
文件 users.txt 的格式为“用户名:角色:城市”。仅使用本节工具完成 4 项明确任务。
- 统计文件共有多少条记录。
- 提取所有用户名,并按字母顺序排列。
- 列出不重复的角色。
- 统计各城市人数,并按人数从多到少排列。