csvファイルに基づいて、週別、性別の累積額を計算して要約出力

csvファイルに基づいて、週別、性別の累積額を計算して要約出力

このような場合はどうすればよいですか?

Purchase Summary Report
State Gender Purchase Amount
TX F 33734.33
CA F 23911.61
TX M 23043.64
FL M 18846.49

総取引額を小数点以下の2桁まで合計し、各州の男性と女性でソートする必要がありますか?

データ

customer_id,first_name,last_name,email,gender,purchase_amount,credit_card,transaction_id,transaction_date,street,city,state,zip,phone

はい

$ cat infile
c77ea913-c4a2-4ff6-b615-26028b375fda,wye,nnnnnnnnn,[email protected],F,23911.61,dddddddddddddddd,8a412563-2956-4bf3-9df3-54277a9799c7,yyyy-mm-dd,ss ssss sssssss, ccccccccc,ca,93000,ddd-ddd-2825
c117f14d-1322-45a9-9f9b-63db5105fd6c,melany,nnnnnnnnn,[email protected],F,33100.03,dddddddddddddddd,a59201e8-9d3c-4f2b-b1fb-6914895fa5cd,yyyy-mm-dd,aa aaaaaaaaaaa aaa, ccccccccc,tx,73000,ddd-ddd-2869
3153178c-a3fb-44d3-896f-f39da69fe826,nancy,nnnnnnnnnn,[email protected],F,634.30,dddddddddddddddd,4724a9c3-fc8a-49d3-956a-b0646364d3ef,yyyy-mm-dd,aaa aaaaa aaaaa,cccccccccccc,tx,73000,ddd-ddd-8746
e4eb28e6-f960-49eb-8f5d-361df60f00c7,jerome,nnnnnnnnn,[email protected],M,23043.64,dddddddddddddddd,af393a75-6298-4c82-84e0-a778ec9956a2,yyyy-mm-dd,aa aaa aaaaa aaaaaaa,cccccccccccccccc,tx,73000,ddd-ddd-3204
b5c32ded-e769-4c52-a553-e34b548280d0,damiano,nnnnnnnnn,[email protected],M,18846.49,dddddddddddddddd,ff06abad-6787-4236-856d-74ec49df3d04,yyyy-mm-dd,aaaa aa aaaaaaaa,cccccccccccc,fl,32000,ddd-ddd-5361
$ awk 'BEGIN{ FS=OFS="," }
    { arr_state[toupper($12) toupper($5)]+=$6 }
END {
    print "Transaction Count Report"
    for (id in arr_state) {
        printf "%-10s %d\n", id, arr_state[id]
    }
}' infile

私の結果は

Transaction Count Report
State Gender Amount
SCM        2322
MOF        9015
TNM        6671
OR0        3470
WI0        3295
MS0        2640
AZ0        7747
NM0        1090
MD0        2943
AK0        2541

答え1

$ awk 'BEGIN {FS=",";print "State Gender Purchase Amount"} 
       {assoc_arr[toupper($12)$5]+=$6} 
       END {for (id in assoc_arr) {
           printf "%-8s %-8s %8.2f\n", substr(id,1,2), substr(id,3), assoc_arr[id]
           }
       }' infile

State Gender Purchase Amount
TX       M        23043.64
CA       F        23911.61
TX       F        33734.33
FL       M        18846.49
  • 連想配列 assoc_arr を使用して、複合インデックス値を格納できます。ここにありますが、利用可能なレコードのフィールドをtoupper($12)$5リンクできます。awk
  • %fawk oneliner内のprintfジョブで「浮動小数点」数値形式(たとえば)を使用すると、少数で金額を印刷できます。

関連情報