如何基于@与#之间的整数对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
相关产品推荐
相关产品推荐

