我有一个独特的问题。我有一个包含以下列的文件
PersonId, AB1, AB2, AB3, DG1_B1,DG1_B2,DG2
1,0,1,0,3,5,7
2,0,3,1,3,7,4
我想拆分它并根据列前缀创建多个文件。我希望输出如下
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
该文件还存在另一个问题。下次获取输入文件时,列的顺序可能会发生变化,如下所示(注意列 AB3 移至行尾)。
PersonId, AB1, AB2,DG1_B1,DG1_B2,DG2,AB3
1,0,1,3,5,7,0
2,0,3,3,7,4,1
我怎样才能在 awk 中完成这个任务?
答案1
你可以这样做:
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
}'
(它调用文件file_AB.csv
(基于前缀),而不是file_AB1.csv
)