Manejo de posiciones de columna dinámicamente cambiantes y split de files

Tengo un problema único Tengo un file con las siguientes columnas

PersonId, AB1, AB2, AB3, DG1_B1,DG1_B2,DG2 1,0,1,0,3,5,7 2,0,3,1,3,7,4 

Quiero dividir esto y crear varios files basados ​​en el prefijo de la columna. Quiero que la salida sea la siguiente

  • File_AB1.csv

     PersonId, AB1, AB2, AB3 1,0,1,0 2,0,3,1 
  • File_DG1.csv

     PersonId, DG1_B1,DG1_B2 1,3,5 2,3,7 
  • File_DG2.csv

     PersonId, DG2 1,7 2,4 

También hay otro problema con este file. El order de las columnas puede cambiar la próxima vez que obtenga el file de input como se muestra a continuación (observe que la columna AB3 se movió al final de la línea).

 PersonId, AB1, AB2,DG1_B1,DG1_B2,DG2,AB3 1,0,1,3,5,7,0 2,0,3,3,7,4,1 

¿Cómo puedo lograr esto en awk?

Podrías hacer algo como:

 awk -F, ' NR == 1 { for (i = 2; i <= NF; i++) if (match($i, /AB|DG./)) file_list[file[i] = "file_" substr($i, RSTART, RLENGTH) ".csv"] } { for (f in file_list) printf "%s", $1 > f for (i = 2; i <= NF; i++) printf ",%s", $i > file[i] for (f in file_list) print "" > f }' 

(llama al file file_AB.csv (basado en el prefijo), no file_AB1.csv )