如何使用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
相关产品推荐
相关产品推荐

