如何调整特定格式文本文件的行顺序以得到目标结果?
调整文本文件行顺序的几种实用方法
嘿,调整文本文件的行顺序其实有不少实用方法,根据你的需求复杂度,我给你整理了几种常用的方案:
一、用命令行工具快速搞定(适合批量/大文件)
1. sort命令:基础排序首选
如果只是需要简单的字母、数字排序,sort命令绝对是最快的选择:
- 默认按字母顺序排序:
sort input.txt > output.txt - 按数字大小排序(避免"10"排在"2"前面的坑):
sort -n input.txt > output.txt - 倒序排列:
sort -r input.txt > output.txt - 按指定列排序(比如每行用空格分隔,按第二列排序):
sort -k2 input.txt > output.txt
2. awk命令:自定义规则排序
要是你的排序规则更灵活,比如要根据行内某个特定字段排序,awk就能派上用场。举个例子:假设每行格式是名称-数字,要按数字排序,就可以这么写:
awk -F'-' '{print $2, $0}' input.txt | sort -n | cut -d' ' -f2- > output.txt
简单说就是先把数字列提出来放前面,用sort排好后再把原行内容还原回去。
3. sed命令:手动移动特定行
如果只是要调整某几行的位置(比如把最后一行移到开头,或者把某行挪到指定位置),sed就很合适:
- 把最后一行移到开头:
'${x;p;x;}' input.txt > output.txt
- 把第3行移到第1行前面:
'3{h;d};1G' input.txt > output.txt
二、Python脚本:应对复杂排序规则
如果你的排序逻辑特别复杂(比如要根据行内多个条件、正则匹配的内容排序),用Python脚本会更灵活。举个实际例子:
假设你的文本内容是这样的:
apple [5]
banana [2]
cherry [8]
想要按括号里的数字从小到大排序,就可以写个小脚本:
import re # 读取文件内容,过滤空行 with open('input.txt', 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] # 定义排序规则:提取括号里的数字作为排序依据 def get_sort_key(line): num_match = re.search(r'\[(\d+)\]', line) if num_match: return int(num_match.group(1)) return 0 # 没有数字的行默认放最后 # 执行排序 sorted_lines = sorted(lines, key=get_sort_key) # 写入结果文件 with open('output.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(sorted_lines) + '\n')
运行这个脚本就能得到你想要的排序结果啦。
三、手动调整(适合小文件)
如果文件不大,直接用文本编辑器的功能更省事:
- VS Code:选中行后用
Alt+↑/Alt+↓上下移动,或者按Ctrl+Shift+P搜索「Sort Lines」一键排序 - Notepad++:安装TextFX插件后,通过「TextFX > TextFX Tools」选择对应的排序选项
内容的提问来源于stack exchange,提问作者Ion Pop
相关产品推荐
相关产品推荐

