脚本中Uniq去重如何统计次数

wen 实用脚本 11

本文目录导读:

脚本中Uniq去重如何统计次数

  1. 基本用法
  2. 完整示例
  3. 关键点说明
  4. 实际场景示例
  5. 常见问题
  6. 进阶:处理大型文件

在脚本中使用 uniq 命令时,统计次数是通过 -c(或 --count)选项实现的。uniq -c 会在每行前面加上该行连续出现的次数。

基本用法

# 统计每个唯一行的出现次数
sort file.txt | uniq -c
# 按次数降序排列(最常用的统计方式)
sort file.txt | uniq -c | sort -rn

完整示例

假设有个文件 fruits.txt

apple
banana
apple
orange
banana
apple

统计每种水果出现次数:

sort fruits.txt | uniq -c

输出:

   3 apple
   2 banana
   1 orange

按次数降序排列:

sort fruits.txt | uniq -c | sort -rn

输出:

   3 apple
   2 banana
   1 orange

关键点说明

  1. 必须先排序uniq 只去除 连续重复 的行,所以通常先 sort
  2. 统计格式uniq -c 输出格式为 次数 内容(次数默认右对齐)
  3. 调整输出格式
    # 去掉前导空格
    sort file.txt | uniq -c | sed 's/^ *//'
    # 或使用 awk 格式化
    sort file.txt | uniq -c | awk '{print $1,$2}'

实际场景示例

分析日志中的 IP 访问次数

# 从日志提取 IP,统计访问次数最多的前10个
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

统计单词出现频率

# 统计文件中每个单词出现次数
cat file.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn

统计错误类型

# 统计不同错误类型出现次数
grep 'ERROR' app.log | awk '{print $NF}' | sort | uniq -c | sort -rn

常见问题

  1. 忘记排序uniq 只比较相邻行,未排序会得到错误统计
  2. 大小写敏感:Apple 和 apple 会被视为不同
    # 忽略大小写统计
    sort -f file.txt | uniq -c | sort -rn
  3. 空格处理:行首/行尾空格会影响判断
    # 去除行首行尾空格后统计
    awk '{$1=$1;print}' file.txt | sort | uniq -c

进阶:处理大型文件

对于超大文件,可以使用 sort 的临时文件:

sort --parallel=4 -S 1G file.txt | uniq -c | sort -rn > result.txt

uniq -c 是最简单高效的统计去重次数的方法,配合 sort 和管道可以满足大部分统计需求。

抱歉,评论功能暂时关闭!