awk を使用して、行値に基づいて行を列に動的に置き換えます。

awk を使用して、行値に基づいて行を列に動的に置き換えます。

私のファイルには、data_0からdata_4まで繰り返される行のデータが含まれています。尊重されるデータセットの下の列値に変換する必要があります。前のカテゴリのデータが欠落している場合に空白/null値を入力する方法はありますか?例えば

TimeStamp,Block,No_of_requests
04:19:12,data_0,4
04:19:12,data_1,6
04:19:12,date_2,8
04:19:12,date_3,10
04:19:12,data_4,12
04:19:14,data_0,5
04:19:14,data_1,6
04:19:14,date_3,7
04:19:14,data_4,8

予想される出力は次のとおりです。

TimeStamp,data_0,data_1,data_2,data_3,data_4
04:19:12,4,6,8,10,12
04:19:14,5,6,,7,8

など。そのdata_x値が利用できない場合は、空のデータを配置する必要があります。

ベストアンサー1

牛に似た一種の栄養awk解決策:

awk 'BEGIN{ 
         FS = OFS = ",";
         PROCINFO["sorted_in"] = "@ind_num_asc";
         print "TimeStamp,data_0,data_1,data_2,data_3,data_4" 
     }
     NR > 1{ a[$1][substr($2, 6) + 1] = $3 }
     END{ 
         for (i in a) { 
             printf "%s,", i;
             for (j=0; j<=4; j++) printf "%s%s", a[i][j+1], (j == 4? ORS:OFS) 
         }
     }' file

出力:

TimeStamp,data_0,data_1,data_2,data_3,data_4
04:19:12,4,6,8,10,12
04:19:14,5,6,,7,8

おすすめ記事