使用awk在列数量未知的CSV中重复第一列



我试图创建一个2列CSV,其中第一列是名称,第二列是值。我可以使用嵌套循环来实现这一点,但我确信AWK可以更快地完成这一点

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

输出:

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

这个awk应该可以工作:

awk 'BEGIN{FS=OFS=","} {for (i=2; i<=NF; ++i) print $1, $i}' <<< "$DATA"
POLICY_NAME01,VM001
POLICY_NAME01,VM002
POLICY_NAME01,VM003
POLICY_NAME02,VM004
POLICY_NAME03,VM005
POLICY_NAME03,VM006

最新更新