2020-06-21 16:39:45
uniq命令主要用于处理文本文件中相邻的重复行,通常需与sort配合使用以处理非相邻重复行,其核心使用场景包括去除相邻重复行、统计行频次、定位重复数据及忽略特定字段/字符后比较,在日志分析和数据清洗中效率极高。
去除相邻重复行当文本中存在连续重复的行时,可直接使用uniq去除相邻重复内容。例如,文件内容为aabba,执行uniq filename后输出为aba(仅去除相邻重复部分)。
命令格式:uniq filename
限制:无法识别非相邻的重复行,需先通过sort排序使重复行相邻。
统计每行出现次数通过-c选项统计每行的重复数量,适用于分析日志或访问记录中的高频条目。
命令格式:uniq -c filename
输出示例:每行前显示出现次数,如3 error404表示error404出现3次。
扩展应用:结合sort -nr可按频次降序排序,快速定位最高频条目。例如:uniq -c filename | sort -nr
查找完全重复的行使用-d选项仅输出至少出现两次的相邻行,适合快速定位重复数据(如日志中的重复错误信息)。
命令格式:uniq -d filename
输出特点:每条重复行仅打印一次。例如,若文件中有3行相同的error500,输出仅为error500。
忽略行首字段或字符后比较
按字段跳过:-f N选项跳过前N个字段(以空白分隔),适用于忽略日志中的时间戳等前缀。
示例:uniq -f 1 logfile忽略每行第一个字段。
注意:-f按空白分割字段,非字符数。
按字符跳过:-s N选项跳过前N个字符,提供更精确的控制。
示例:uniq -s 10 logfile忽略每行前10个字符后比较剩余内容。
组合使用提升效率uniq功能有限,但与sort、grep、cut等命令组合后,可高效完成复杂任务:
典型流程:先通过sort排序,再用uniq去重或统计。例如:sort filename | uniq -c
日志分析场景:统计HTTP状态码频次时,可结合cut提取状态码列后处理:cut -d' ' -f9 access.log | sort | uniq -c
总结:uniq的核心价值在于快速处理相邻重复行,通过选项扩展可满足统计、去重、字段忽略等需求。结合sort等工具后,能高效应对日志分析、数据清洗等任务,是命令行文本处理的利器。