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

如何使用AWK高效将多列CSV转换为首列与其余列配对的两列CSV?

使用AWK高效实现CSV行转两列展开

需求是将每行第一个字段作为第一列,后续每个字段分别与它配对生成新行,最终得到两列CSV。以下是你当前的Bash嵌套循环实现:

DATA='POLICY_NAME01,VM001,VM002,VM003
POLICY_NAME02,VM004
POLICY_NAME03,VM005,VM006'

IFS=$'\n'
for LINE in $DATA; do
    POLICY=$(echo "${LINE}" | cut -d , -f 1)
    VMS=$(echo "${LINE}" | cut -d , -f 2- | tr ',' '\n')
    for VM in $VMS; do
        echo "${POLICY},${VM}"
    done
done

AWK高效实现方案

用AWK只需一行命令就能完成,无需多次调用外部工具(cut/tr),性能更优:

echo "$DATA" | awk 'BEGIN{FS=","} {for(i=2;i<=NF;i++) print $1","$i}'

代码解释:

  • BEGIN{FS=","}:预先设置字段分隔符为逗号
  • for(i=2;i<=NF;i++):从第2个字段开始,遍历到该行的最后一个字段
  • print $1","$i:将第一个字段(策略名)与当前遍历到的字段(虚拟机名)用逗号拼接后打印

执行上述命令后,输出结果如下:

POLICY_NAME01,VM001
POLICY_NAME01,VM002
POLICY_NAME01,VM003
POLICY_NAME02,VM004
POLICY_NAME03,VM005
POLICY_NAME03,VM006

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:35:26