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

如何将分隔文件中指定列逆透视为行?求优雅脚本方案

优雅解决CSV列转行问题(无需重复cut命令)

这绝对是awk的拿手好戏!不用重复写五次cut命令,一个简洁的awk脚本就能搞定所有转换,而且扩展性还强,完美适配你的需求。

核心解决方案:awk脚本

我们可以利用awk的循环功能,一次性遍历所有Nxx/Txx列对,自动生成目标行:

BEGIN { FS = OFS = "," }
{
    # 循环处理1到5(对应N01-N05、T01-T05)
    for (i = 1; i <= 5; i++) {
        # 计算当前Nxx的列号:D是第4列,N01从第5列开始,所以是4+i
        n_col = 4 + i
        # 计算当前Txx的列号:N系列占5列,所以T01从第10列开始,即9+i(4+5+i)
        t_col = 9 + i
        # 输出A-D列 + Nxx值 + Txx值 + 计数器xx
        print $1, $2, $3, $4, $(n_col), $(t_col), i
    }
}

使用方法

  1. 将上述脚本保存为convert.awk文件
  2. 运行命令处理你的输入文件(假设输入文件名为input.csv):
awk -f convert.awk input.csv > output.csv

或者直接用一行命令搞定,不用单独存脚本:

awk 'BEGIN{FS=OFS=","}{for(i=1;i<=5;i++)print $1,$2,$3,$4,$(4+i),$(9+i),i}' input.csv > output.csv

效果验证

拿你给出的第一行输入数据:

A01,B01,C01,0,1,2,3,4,5,101,102,103,104,105

脚本会自动生成5行目标输出:

A01,B01,C01,0,1,101,1
A01,B01,C01,0,2,102,2
A01,B01,C01,0,3,103,3
A01,B01,C01,0,4,104,4
A01,B01,C01,0,5,105,5

完全符合你想要的格式!

扩展性说明

如果以后N/T的数量变化(比如从N01-N5扩展到N01-N10),只需要修改两个地方:

  1. 把循环条件i <= 5改成i <= 10
  2. 把T列的计算式9 + i改成4 + 10 + i(也就是14 + i,因为N系列占10列,T从第4+10+1=15列开始)

整个脚本逻辑清晰,维护成本极低,比重复写cut命令优雅太多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:28:08