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

需求:用BASH脚本按列值拆分管道分隔文件并保留表头

按列拆分管道分隔文件并保留指定列的BASH脚本实现

需求概述

处理管道分隔的fulldata.tmp文件(支持改为逗号分隔,偏好管道),实现:

  • 按第1列的值拆分各行到独立文件
  • 每个输出文件仅保留指定列(示例取前4列)
  • 输出文件命名为final_${第1列值}.csv
  • 数据可预先排序,调试环境无终端交互权限

示例输入

GROUPID|LABEL|DATE|ACTIVE|COMMENT
ABC|001|2022-09-15|True|None
DEF|001|2022-09-16|False|None
GHI|002|2022-10-17|True|Future

期望输出

final_ABC.csv

GROUPID|LABEL|DATE|ACTIVE
ABC|001|2022-09-15|True

final_DEF.csv

GROUPID|LABEL|DATE|ACTIVE
DEF|001|2022-09-16|False

final_GHI.csv

GROUPID|LABEL|DATE|ACTIVE
GHI|002|2022-10-17|True

核心实现脚本

使用awk即可完成所有需求,脚本如下:

awk -F'|' '
BEGIN {OFS="|"}
NR==1 {
    header = $1 OFS $2 OFS $3 OFS $4
    next
}
{
    filename = "final_" $1 ".csv"
    if (!seen[filename]++) {
        print header > filename
    }
    print $1, $2, $3, $4 >> filename
    close(filename)
}
' fulldata.tmp

脚本说明

  • -F'|':指定输入数据的分隔符为管道
  • BEGIN {OFS="|"}:设置输出数据的分隔符为管道,保证格式统一
  • NR==1分支:处理表头行,提取需要保留的前4列存为header变量,然后跳过当前行的后续处理
  • 正文行处理:
    • 拼接生成目标文件名final_$1.csv
    • seen[filename]++:通过数组标记文件是否已创建,首次创建时写入表头
    • 打印当前行的指定列到目标文件
    • close(filename):及时关闭文件,避免因打开过多文件句柄导致报错

灵活调整说明

  1. 修改输出列:调整header变量和print语句中的列索引即可,例如要输出第1、3、5列,改为:
    header = $1 OFS $3 OFS $5
    # ...
    print $1, $3, $5 >> filename
    
  2. 切换为逗号分隔:将-F'|'改为-F',',OFS="|"改为OFS=","即可适配逗号分隔的输入文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:25