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

如何用sed实现文件前两列最后四位数字的循环加1替换?

批量处理CSV列末尾四位数字循环加1

需求说明

现有如下格式的CSV文件:

ID,SEQ,PO_NUM,BATCH,CREATE_DT
99001100788259,127856626,111,20230801
99001100788270,223412976,111,20230801
99001100788281,112120972,222,20230801

需要实现:每行前两列的最后四位数字按规则替换——每位数字加1,9变为0(0→1、1→2…8→9、9→0),最终期望结果:

99001100789360,127857737,111,20230801
99001100789381,223413087,111,20230801
99001100789392,112121083,222,20230801

解决方案:用awk实现

sed擅长简单字符替换,但这种需要逐字符做数值计算的场景,awk更合适。直接用下面的awk命令处理文件(假设文件名为data.csv):

awk -F ',' '
NR==1 {print; next}
function process_str(s) {
    prefix = substr(s, 1, length(s)-4)
    suffix = substr(s, length(s)-3)
    new_suffix = ""
    for(i=1; i<=4; i++) {
        c = substr(suffix, i, 1)
        new_c = (c + 1) % 10
        new_suffix = new_suffix new_c
    }
    return prefix new_suffix
}
{
    $1 = process_str($1)
    $2 = process_str($2)
    print $1 "," $2 "," $3 "," $4 "," $5
}' data.csv

命令解释

  • -F ',':指定CSV的分隔符为逗号
  • NR==1 {print; next}:第一行是表头,直接输出后跳过后续处理
  • 自定义函数process_str(s):处理单个字段的逻辑
    • prefix = substr(s, 1, length(s)-4):提取字段除最后四位外的前缀部分
    • suffix = substr(s, length(s)-3):提取最后四位数字
    • 循环遍历四位数字的每一位,计算(数字+1)%10(自动实现9→0的循环),拼接成新的后缀
    • 返回前缀+新后缀的结果
  • 主逻辑:调用函数处理第1、2列,然后按CSV格式拼接所有字段输出

运行结果

执行命令后,输出就会和你期望的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:10