sort 的-u

理解sort命令的-u参数及正确使用方法
本文详细解析了sort命令中的-u参数,并通过实例展示了如何正确使用该参数进行排序,避免常见错误。
sort 的-u 参数总结
 
sort这个命令很实用,用来排序很方便,但是因自己有用错该参数的情况,现总结记录下来。
 
有个源文件有2个字段的内容:a.txt
123   333
234   333
456   444
345   444
457   222
146   111
 
...     .....
 
当只想按第2个字段数字排序时,第一遍使用以下命令得到奇怪结果。
sort -u -n -k2 a.txt
本来以为-u参数用来把文件中,2个字段加一起都一样的行进行去重,但结果却不是那样。发现还把第2个字段相同的也去掉了,只保留了第2个字段一样的行里的其中一行。
 
后面研究发现,当指定了排序行后,-u就只作用于该行了。如果想达到之前的效果,需要把默认排序的第1个字段也显示标出来。
sort -u -kn2 -kn1 a.txt
### 使用 `sort -u` 进行去重操作 在 Shell 中,`sort -u` 是一种常见的文本去重方式,它结合了排序和全局去重的功能。与 `uniq` 不同,`sort -u` 不仅能去除相邻的重复行,还能在整个文件范围内识别并删除重复项[^2]。 #### 基本语法 ```bash sort -u [选项] [文件] ``` 该命令会对输入文件进行排序,并保留每组相同行中的第一条记录,忽略其余重复行。这种方式适用于需要对整个文件内容进行去重处理的场景。 #### 示例 假设有一个名为 `test` 的文件,其内容如下: ``` jason jason fffff jason ``` 执行以下命令: ```bash sort -u test ``` 输出结果为: ``` fffff jason ``` 这表明 `sort -u` 会按照 ASCII 码顺序对所有行进行排序,并在整个文件范围内删除重复项,而不是仅仅作用于相邻行[^3]。 #### 与其他命令的对比 - **`uniq`**:仅对相邻的重复行进行去重。如果相同的行不连续出现,则不会被识别为重复项。 ```bash uniq test ``` 输出为: ``` jason fffff jason ``` - **`sort | uniq`**:先使用 `sort` 对文件进行排序,再通过 `uniq` 去除相邻重复行,效果等价于 `sort -u`。 ```bash sort test | uniq ``` 输出为: ``` fffff jason ``` 尽管 `sort | uniq` 和 `sort -u` 功能相似,但 `sort -u` 在性能上通常更优,因为它在一个步骤中完成排序和去重操作,而无需额外调用 `uniq` 命令[^2]。 #### 高级应用 若需根据特定字段而非整行内容进行去重,可以使用 `-k` 选项指定排序键。例如,假设文件 `data.txt` 包含以下内容: ``` apple 10 banana 5 apple 20 orange 15 ``` 若希望基于第一列(水果名称)进行去重: ```bash sort -u -k1,1 data.txt ``` 输出结果为: ``` apple 10 banana 5 orange 15 ``` 此命令将保留每个水果名称首次出现的记录,并忽略后续重复项[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值