gawkを使用してCSV列データに基づいてファイル名を作成する

gawkを使用してCSV列データに基づいてファイル名を作成する

次のヘッダーを含む非常に汚れたCSVファイルがあります。

maindata.csv

time;area;measurement1;measurement2;measurement3;.....measurement12

gawk各個々のファイルを次のCSV形式に維持するために、次のコマンド形式を使用して、測定名に基づいて1つの大容量ファイルを個別に分割できました。

measurement1.csv -> has csv header [time,area,measurement1]
measurement2.csv -> has csv header [time,area,measurement2]
....
measurement12.csv -> has csv header [time,area,measurement12]

gawk注文する:

gawk -F';' '{print $1","$2","$X}' maindata.csv > /splitdata/measurementX.csv

どこにXその測定の列番号がありますか?

毎回端末でこれを手動で実行する必要があり、実際に測定列名を抽出し、上記のコマンドをファイル名をgawk指定するために自動的に使用できるいくつかの変数に置き換える方法を使用できるかどうか疑問に思います。measurementX.csv

はい

gawk -F';' '{print $1","$2","$3}' maindata.csv | head -n 1 > splitdata/measurement<get the column 3 name here>.csv

ポリスチレン簡単に言えば、列名はですmeasurementX。実際にはtemperature、またはpumpmotorなどにすることができます。

ベストアンサー1

measurements.awk:

BEGIN{FS=";";OFS=","}
{
    for (X=3;X<=NF;X++){
        if (NR==1){name[X]=$X}
        print $1,$2,$X > name[X]".csv"
    }
}

これはNR==1ヘッダーでのみ機能します。したがって、測定名を配列に保存し、nameその[time,area,measurement]ファイルの各測定セットを印刷します。

$ gawk -f measurements.awk file
$ cat file
time;area;temperature;pumpmotor;diameter
1;2;3;4;5
6;7;8;9;10
$ cat diameter.csv 
time,area,diameter
1,2,5
6,7,10
$ cat temperature.csv 
time,area,temperature
1,2,3
6,7,8
$ cat pumpmotor.csv 
time,area,pumpmotor
1,2,4
6,7,9

おすすめ記事