You need to enable JavaScript to run this app. UNIX 如何实现文件特定列下的指定字符交换操作
优惠活动
大模型
产品
解决方案
定价
更多

UNIX 如何实现文件特定列下的指定字符交换操作

分号分隔文本指定列值交换实现流程

前置规则确认

  • 源文件file.txt采用英文分号;作为列分隔符
  • 列结构固定,仅第三列始终为11位纯数字,其余列长度动态可变,无固定长度要求
  • 处理目标:将第三列的最后两位数字位置互换(如原末两位为01则调整为10),处理结果写入独立新文件,不修改覆盖源文件

核心处理逻辑

逐行读取源文件内容,全程不需要适配其他列的长度变化,仅针对固定特征的第三列做调整:

  • 跳过读取过程中的空行,避免生成格式错乱的无效记录
  • 对每行内容按分号拆分得到独立列值,定位到数组中索引为2的第三列值
  • 对第三列值做定点调整:截取该值的前9位,依次拼接倒数第一位、倒数第二位字符,生成调整后的新第三列值
  • 将调整后的所有列重新用分号拼接为完整行,写入目标新文件

可直接落地的实现方案

1. 跨平台Python实现(兼容性最强,适配Windows/Linux/macOS全环境)

# 以只读模式打开源文件,以写入模式创建新的结果文件
with open("file.txt", "r", encoding="utf-8") as src, open("file_modified.txt", "w", encoding="utf-8") as dst:
    for line in src:
        line = line.strip()
        # 跳过空行
        if not line:
            continue
        col_list = line.split(";")
        # 定位第三列值
        third_col = col_list[2]
        # 做数据合法性校验:第三列必须是11位数字,不符合则输出异常提示不做修改
        if len(third_col) != 11 or not third_col.isdigit():
            print(f"检测到异常行内容:{line},第三列不符合固定11位数字规则,已跳过处理")
            continue
        # 交换最后两位:取前9位 + 倒数第1位 + 倒数第2位
        new_third_col = third_col[:9] + third_col[-1] + third_col[-2]
        col_list[2] = new_third_col
        # 重新拼接为完整行写入结果文件
        dst.write(";".join(col_list) + "\n")

处理效果验证:

  • 原第一行第三列值12345678901,处理后得到12345678910
  • 原第二行第三列值98765432201,处理后得到98765432210
    完全匹配末尾两位从01交换为10的要求。

2. Linux/macOS 环境sed命令实现(无需写脚本,直接执行)

sed 's/^\([^;]*;[^;]*;\)\([0-9]\{9\}\)\(.\)\(.\)\(;.*\)$/\1\2\4\3\5/' file.txt > file_modified.txt

匹配逻辑说明:

  • 规则中前面的通配部分自动适配前两列、第四列的任意长度内容,不受文本长度动态变化的影响
  • 精准匹配第三列的11位数字结构:识别出第三列的前9位数字,将后续两个单独捕获的字符顺序互换,完成末尾两位的交换操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 05:24:11