sort、uniq对汉字不生效

本文介绍如何解决非UTF-8编码文件中使用sort和uniq命令时出现的问题,特别是对于包含中文字符的情况。通过调整文件编码来确保这些工具能够正确处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sort file_name

当file_name文件里包含汉字时,并且文件编码不是utf8的时候,就可能会失效,你会发现相同的字符串,却不在相邻行

另外uniq命令也是,

uniq file_name

当file_name文件里包含汉字时,并且文件编码不是utf8的时候,就可能会失效,你会发现重复的行没有被去重掉


sort -u file_name

sort -u 问题会表现的更加严重,把不是相同的行,都给干掉了


解决方法

iconv -f cp936 -t utf-8 file_name | sort |uniq | iconv -f utf-8 -t cp936 >file_name.uniq

上面iconv命令转换了一次编码,cp936可能需要修改,你的文件是gbk的时候是cp936



### 使用 `sort` 和 `uniq` 命令 #### 一、`sort` 命令详解 `sort` 是 Linux/Unix 中用于对文本文件的内容进行排序的强大工具。默认情况下,它会基于 ASCII 编码顺序对每一行数据进行排序[^1]。 以下是常用的参数及其功能: - `-b`: 忽略前导空白字符(如空格和制表符)。 - `-c`: 检查输入是否已排序;如果未排序,则返回错误消息并退出。 - `-d`: 只比较字母数字字符和空格字符,忽略其他字符。 - `-f`: 将所有的小写字母视为大写字母进行比较。 - `-n`: 按照数值大小而非字符串字典顺序进行排序。 - `-r`: 以相反的顺序排列输出结果。 - `-u`: 抑制复行的显示,仅保留唯一的一份副本。 - `-k POS1[,POS2]`: 定义要排序的关键字段范围。 - `-t CHAR`: 设置字段分隔符为指定字符。 示例代码如下所示: ```bash # 对文件 data.txt 进行升序排序,并保存到 sorted_data.txt 文件中 sort -o sorted_data.txt data.txt # 数值降序排序 sort -nr file_with_numbers.txt ``` #### 二、`uniq` 命令概述 `uniq` 命令主要用于过滤相邻的复行。需要注意的是,该命令只会移除连续相同的记录,因此通常需要先通过 `sort` 来预处理数据以便获得全局的效果[^2]。 主要选项有以下几个方面: - `-c | --count`: 统计每条不复项的数量,在其左侧打印出现次数; - `-d | --repeated`: 仅仅展示那些存在多次实例的数据行; - `-i | --ignore-case`: 不区分大小写的匹配模式; - `-u | --unique`: 输出只发生过一次的独特项目列表。 实际操作例子: ```bash # 查找 log_file.log 中唯一的 IP 地址 cat log_file.log | cut -d ' ' -f 1 | sort | uniq # 显示访问日志里各 ip 的请求频次 awk '{print $1}' access_log | sort | uniq -c | sort -nr ``` #### 三、两者联合运用场景分析 当面对大量无规律的日志或者杂乱的信息集合时,单独依靠任何一个都不能达到理想效果。此时可以将这两个指令结合起来使用: 1. **除完全相同的所有记录** 首先利用 `sort` 实现初步整理工作,接着再交给 `uniq` 处理掉多余的拷贝版本。 2. **统计频率最高的关键词组** 结合管道机制串联多个进程调用,最终得到我们关心的结果集。 综合应用案例演示: ```bash # 计算某个文档中最常使用的单词 tr -cs "A-Za-z0-9" "\n" < input_text | tr "[:upper:]" "[:lower:]" | grep -v "^$" | sort | uniq -c | sort -rn | head -n 10 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值