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

命令行下如何将长表转宽表?已尝试csvfix flatten未达预期

命令行实现CSV长表转宽表(解决csvfix flatten不符合预期问题)

问题说明

需要将以下长格式CSV转换为宽格式:

长表示例

Room,"Variable Name",Value
Bedroom,Temperature,23
Bedroom,Humidity,78
Office,Temperature,26
Office,Humidity,82
Bathroom,Temperature,18
Bathroom,Humidity,97

目标宽表示例

Room,Temperature,Humidity
Bedroom,23,78
Office,26,82
Bathroom,18,97

之前使用csvfix flatten -smq命令得到了不符合预期的结果:

Room,"Variable Name",Value
Bedroom,Temperature,23,Humidity,78
Office,Temperature,26,Humidity,82
Bathroom,Temperature,18,Humidity,97

解决方案

方法1:使用csvfix的pivot命令(推荐)

flatten命令仅能将同组行拼接成一行,而**pivot才是专门用于长表转宽表的命令**,执行以下命令即可得到目标格式:

csvfix pivot -f 1 -v 2 -d 3 input.csv

参数解释:

  • -f 1:指定第1列(Room)作为分组依据
  • -v 2:指定第2列(Variable Name)作为新的列名
  • -d 3:指定第3列(Value)作为对应列名的值

方法2:使用awk命令(无需额外工具)

如果系统未安装csvfix,可以用awk直接处理:

awk -F',' '
NR==1 {next}
!seen[$1]++ {rooms[++n]=$1}
{vals[$1][$2]=$3}
END {
    printf "Room,Temperature,Humidity\n"
    for(i=1;i<=n;i++){
        printf "%s,%s,%s\n", rooms[i], vals[rooms[i]]["Temperature"], vals[rooms[i]]["Humidity"]
    }
}' input.csv

逻辑说明:

  • 跳过表头行,按Room分组存储温度和湿度值
  • 最后遍历所有Room,按目标格式输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:20