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

使用awk拆分下划线分隔多ID的列,保留前置分隔符并拆分出末尾ID列

实现方案

你已经通过split($1, b, "_")拿到了第一列按下划线拆分的数组b、以及拆分得到的总段数n,只需要对数组做截取拼接就能得到符合要求的两列:

  • 前置ID列:取数组的前n-1个元素,元素之间保留原下划线分隔拼接成字符串,完全还原目标格式
  • 末尾ID列:直接取数组的第n个元素,也就是拆分出来的最后一段内容

可直接运行的命令

兼容所有awk版本的通用写法

不依赖特定awk版本的内置函数,所有运行环境都能正常执行:

awk '{
  n = split($1, b, "_");
  prefix = "";
  # 遍历从第一个到倒数第二个的元素,逐次拼接,保留原有下划线分隔
  for (i=1; i < n; i++) {
    prefix = (i == 1 ? b[i] : prefix "_" b[i]);
  }
  # 替换原第一列为拆分后的两部分,按需求加固定间隔,保留原行其他内容输出
  $1 = prefix "  " b[n]
  print
}' 你的大文本文件路径

GNU awk 精简写法

如果是Linux系统默认安装的gawk(GNU版本awk),可以直接用内置的数组范围拼接函数,代码更简洁:

awk '{
  n = split($1, b, "_");
  prefix = join(b, 1, n-1, "_");
  $1 = prefix "  " b[n]
  print
}' 你的大文本文件路径

拆分效果匹配

按照给出的示例输入,输出结果完全符合预期:

  • 输入s1_asd_ucsd → 输出s1_asd ucsd
  • 输入b4_asd_id_vu → 输出b4_asd_id vu
  • 输入c10_id_js_uw → 输出c10_id_js uw
  • 输入d4_sch_vu → 输出d4_sch vu

注意事项

  • 拆分逻辑不绑定固定的ID段数,不管第一列是3段还是6段下划线连接的ID,都能正确拆分,不需要手动调整段数阈值
  • 如果需要调整两列之间的间隔符,只需要修改命令中prefix " " b[n]部分的间隔内容即可,比如改成prefix "\t" b[n]就是制表符分隔
  • 命令会保留原行除第一列外的所有其他列内容,不会丢失原有数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:06:04