私には独特の問題がある。次の列を含むファイルがあります。
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
)