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

如何基于@与#之间的整数对TXT文件进行排序?

按@与#之间的整数对文本文件排序的方法

问题描述

我有一个内容如下的TXT数据文件:

@0 #1
@30 #2
@750 #2
@20 #3
@500 #3
@2500 #4
@460 #4
@800 #1
@2200 #1
@290 #2
@4700 #4
@570 #1

需要基于@和#之间的整数对该文件进行排序,预期输出如下:

@0 #1
@20 #3
@30 #2
@290 #2
@460 #4
@500 #3
@570 #1
@750 #2
@800 #1
@2200 #1
@2500 #4
@4700 #4

解决方法

1. Linux/macOS 命令行(awk+sort+cut)

这是最快捷的命令行方案,利用文本处理工具组合实现:

awk -F'[@#]' '{print $2, $0}' input.txt | sort -n | cut -d' ' -f2-

步骤说明:

  • awk -F'[@#]' '{print $2, $0}':以@和#作为分隔符,提取每行中间的整数($2),将其与原行内容一起输出(格式为整数 原行)
  • sort -n:按数值从小到大对输出内容排序
  • cut -d' ' -f2-:去掉开头的整数部分,保留原行内容,得到最终排序结果

如果想直接生成排序后的文件,可加重定向:

awk -F'[@#]' '{print $2, $0}' input.txt | sort -n | cut -d' ' -f2- > sorted_input.txt

2. Python脚本(跨平台通用)

如果需要跨平台支持,或者后续要扩展逻辑,用Python脚本更灵活:

# 读取原文件内容
with open('input.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 按@和#之间的整数排序
lines.sort(key=lambda line: int(line.split('@')[1].split('#')[0]))

# 将排序后的内容写入新文件
with open('output.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)

逻辑说明:

  • 用split('@')[1]提取@后的部分,再用split('#')[0]截取#前的整数,转成int类型作为排序依据
  • 直接对读取的行列表排序,最后写入输出文件

3. Windows PowerShell 方法

Windows环境下可以用PowerShell实现:

Get-Content input.txt | Sort-Object { [int]($_.Split('@')[1].Split('#')[0]) } | Set-Content output.txt

步骤说明:

  • Get-Content读取文件内容
  • Sort-Object以提取的整数作为排序键进行排序
  • Set-Content将结果写入输出文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:05:30