You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并含空文件的File4按第二字段倒序排序求助

搞定File4按第二字段倒序排序的问题

嘿,我来帮你梳理下问题根源和解决办法~

首先你遇到两个小麻烦:一是File4左侧有多余空格,二是sort -k2,2 -r没按你预期的第二字段倒序,反而只是反转了原有顺序。咱们一步步来解决:

为啥会出问题?

  1. 左侧空格的由来:因为File2是空文件,cat File2 File3 > File4其实就是把File3原封不动复制到File4,所以空格肯定是从File3带过来的——也就是你之前用uniq -d File1输出的每行开头就有空格(或者那个$符号加空格)。
  2. sort命令失效的关键:你的数据是用#分隔字段的,但sort默认认的是**空白字符(空格、制表符)**当分隔符!所以你写-k2,2的时候,它是把空白分割后的第二个“块”当成字段,而不是#分割后的第二个字段。比如行$ John#Smith#3400#2000.00,空白分割后第一个字段是$,第二个是整个John#Smith#3400#2000.00,这时候sort -k2,2 -r当然只会按这个长字符串反转,根本没用到你想要的Smith/George这些字段。

一步步解决

第一步:清理开头的多余字符(可选但推荐)

如果想去掉每行开头的$和空格,用sed一键搞定:

sed 's/^[ $]*//' File4 > File4_cleaned

这个命令会删掉每行开头所有的空格和$,处理后每行就变成John#Smith#3400#2000.00这种干净的格式。

第二步:按#分隔的第二字段倒序排序

现在给sort指定分隔符为#,让它识别正确的字段:

# 用清理后的文件排序
sort -t '#' -k2,2r File4_cleaned

# 不想清理直接处理原File4也可以,命令一样
sort -t '#' -k2,2r File4

参数说明:

  • -t '#':告诉sort“字段之间用#分隔”
  • -k2,2r:表示按第2个字段(从1开始数)排序,r是倒序的意思

如果要把排序结果保存下来,加个重定向就行:

sort -t '#' -k2,2r File4_cleaned > File4_sorted

看看效果

假设清理后的File4_cleaned内容是:

John#Smith#3400#2000.00
Hidey#George#1000#2000.00
Blue#Light#2300#9000.00
Trasy#Brown#2000#4000.00
Hidey#George#1000#2000.00

执行排序命令后,输出会按第二字段倒序排列(Smith > Light > George > Brown):

John#Smith#3400#2000.00
Blue#Light#2300#9000.00
Hidey#George#1000#2000.00
Hidey#George#1000#2000.00
Trasy#Brown#2000#4000.00

这样就完全符合你的需求啦~

内容的提问来源于stack exchange,提问作者Tasneem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:47:44