Awk
列印 awk 數組並用逗號替換特殊字元
我希望標題能正確解釋這一點。我目前正在嘗試在計算電子表格中的唯一值後列印出一個數組。
我的 awk 命令正常工作:
awk -F"," 'NR>1{col[$1,$9]++} END {for (i in col) printf("%s: %d\n", i, col[i])}' my_file.csv | sort
列印時,雖然我得到一個看起來像問號的特殊字元。
如何在年份和季節之間用逗號 + 空格列印它。
例如:1896,夏天:151
awk 將
[$1,$9]
其視為偽多維數組,並插入其內部SUBSEP
字元。這記錄在GNU Awk 使用者指南中,例如:SUBSEP
下標分隔符。它的預設值為“\034”,用於分隔多維數組的索引部分。因此,表達式 ‘foo
$$ “A”, “B” $$’ 真正訪問 foo$$ “A\034B” $$ (參見多維數組部分)。
前任。
$ echo 'A,A' | gawk -F, '{col[$1,$2]++} END{for(i in col) print i}' | od -to1 0000000 101 034 101 012 0000004
如果您想要一個由字元串的文字值索引的一維數組,您可以使用
[$1 "," $9]
或更一般地[$1 FS $9]
(後者確保該解決方案適用於具有其他分隔符的數據):$ echo 'A,A' | gawk -F, '{col[$1 FS $2]++} END{for(i in col) print i}' A,A
如果您想要逗號+空格,請使用
[$1 FS" " $2]
或設置SUBSEP = FS" "
在一個BEGIN
塊中。