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

如何为文件中的数字按固定位置插入指定分隔符?

批量转换时间数字格式的解决方案

你可以用gawk直接处理整个文件,通过自定义函数或字段拆分来批量转换每行的两个数字。以下是两种可行的方案:

方案1:使用字符串截取(更直观)

这个方法直接通过substr截取固定长度的字符段,拼接成目标格式:

gawk '{
    function format_time(num) {
        return sprintf("%s:%s:%s,%s", substr(num,1,2), substr(num,3,2), substr(num,5,2), substr(num,7,3))
    }
    match($0, /^([0-9]{9}) ===> ([0-9]{9})$/, parts)
    print format_time(parts[1]) " ===> " format_time(parts[2])
}' 你的文件名.txt

说明:

  • match函数匹配每行的结构,把两个9位数字捕获到parts数组中
  • format_time函数负责将单个9位数字拆分为小时:分钟:秒,毫秒格式:
    • 前2位=小时,第3-4位=分钟,第5-6位=秒,最后3位=毫秒
  • 最后将格式化后的两个数字和原箭头组合输出

方案2:复用你之前的FIELDWIDTHS思路

如果你更习惯用FIELDWIDTHS来拆分字段,可以用这个版本:

gawk '{
    # 拆分出两个待处理的数字
    split($0, nums, / ===> /)
    
    # 处理第一个数字
    FIELDWIDTHS="2 2 2 3"
    $0 = nums[1]
    fmt1 = sprintf("%s:%s:%s,%s", $1, $2, $3, $4)
    
    # 处理第二个数字
    $0 = nums[2]
    fmt2 = sprintf("%s:%s:%s,%s", $1, $2, $3, $4)
    
    print fmt1 " ===> " fmt2
}' 你的文件名.txt

使用方式:

把命令里的你的文件名.txt替换成你实际的文件路径即可。如果需要从标准输入读取内容(比如通过管道传递),可以去掉文件名,改成:

cat 你的文件名.txt | gawk '{...}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:49:56