Bash
如何將過濾後的數據格式化為新文件?
大家好,我正在嘗試從文件中讀取數據,並檢查每個狀態並從數據中增加總交易計數:
REDACTED
這是我嘗試作為模板的方法,但我對如何為每個狀態遞增以及如何以該格式準確寫入文件感到困惑?
awk -v _State=$State -v _TransactionCount=$transactionCount awk 'BEGIN{ FS=OFS="," } arr_state[$2]+=$11 END { print "%s\n", "Transaction Count Report" for (id in arr_state) { print "%-10s %s\n", state, arr_state[state] } }' < "summary.csv" > "transaction-rpt.csv"
awk 'BEGIN{ FS=OFS="," } { arr_state[toupper($2)]+=$11 } END { print "Transaction Count Report" for (id in arr_state) { printf "%-10s %d\n", id, arr_state[id] } }' infile
假設您要為每個狀態(第二列中的兩個字母組合)累積的計數是每行輸入的最後一個:
$ awk -F, -v OFS='\t' '{ sum[$2] += $NF } END { print "State", "Transaction count"; for (i in sum) print toupper(i), sum[i] }' file.csv State Transaction count OR 366.68 WV 531.13 AK 792.74 AL 477.18 TX 166.62 CA 781.65 FL 88.88 NV 858.58 MN 93.65 GA 171.06 LA 570.32 OK 921.6
這會將輸出欄位分隔符 , 設置
OFS
為命令行上的製表符,並將輸入欄位分隔符 ,FS
設置為逗號字元。這假定輸入是一個簡單的 CSV 文件,即它是一個包含帶有逗號分隔欄位的行的文件,其中沒有欄位包含嵌入的逗號或換行符。關聯數組
sum
使用第二個欄位作為其鍵,並且對於每一行,總和使用該行的最後一個欄位遞增。最後列印一個簡單的表頭,
sum
輸出數組中採集到的數據。作為一個獨立
awk
程序,程式碼將被編寫為BEGIN { FS = "," OFS = "\t" } { sum[$2] += $NF } END { print "State", "Transaction count" for (i in sum) print toupper(i), sum[i] }
這將用作
$ awk -f script.awk file.csv
您是否希望將總和四捨五入到最接近的整數,列印
int(sum[i]+0.5)
而不是 justsum[i]
。