動的行データを別の列に固有の値を持つ列にピボット

動的行データを別の列に固有の値を持つ列にピボット

動的行データを列フィールドに変換する特別な要件が見つかりました。次の内容を含む「output.csv」ファイルがあるとします。

TimeStamp,Block,No_of_requests
04:19:12,Block_1,4
04:19:12,Block_2,4
04:19:14,Block_1,3
04:19:15,Block_1,1
04:19:15,Block_2,2
04:19:16,Block_1,5
04:19:16,Block_2,1

必要な出力は次のとおりです。

TimeStamp,Block_1,Block_2
04:19:12,4,4
04:19:14,3,
04:19:15,1,2
04:19:16,5,1

output.csvファイルはスクリプトを使用して動的に生成されるため、ブロック数に制限はありません(ここにはBlock_1とBlock_2がありますが、スクリプトはBlock_3、Block_4、Block_5などのようなより多くのブロックを生成できます)。

要求数と各ブロックの下の一意のタイムスタンプ値を持つ列ヘッダーとしてブロック番号が必要です。

私はしばらくこれについて心配してきましたが、まだこのピボットポイントを作成する方法がわかりません。

ベストアンサー1

awk入力データがソートされたと仮定してスクリプトを作成します。

awk -F',' 'NR>1 {a[$1]=a[$1]","$3}
    END{ print "Timestamp, Block_1, Block_2"; 
         for (i in a) print i""a[i]}' infile

それ以外の場合は、最初に並べ替えてから上に渡してくださいawk

awk -F',' 'NR>1 {a[$1]=a[$1]","$3}
    END{ print "Timestamp, Block_1, Block_2"; 
         for (i in a) print i""a[i]}' <(sort infile) 

おすすめ記事