Awk

列印 awk 數組並用逗號替換特殊字元

  • August 31, 2021

我希望標題能正確解釋這一點。我目前正在嘗試在計算電子表格中的唯一值後列印出一個數組。

我的 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塊中。

引用自:https://unix.stackexchange.com/questions/666846