mal*_*r11 4 command-line awk printf
我希望标题能正确解释这一点。我目前正在尝试在计算电子表格中的唯一值后打印出一个数组。
我的 awk 命令工作正常:
awk -F"," 'NR>1{col[$1,$9]++} END {for (i in col) printf("%s: %d\n", i, col[i])}' my_file.csv | sort
Run Code Online (Sandbox Code Playgroud)
虽然打印时我得到一个看起来像问号的特殊字符。
如何在年份和季节之间用逗号 + 空格打印这个。
例如:1896 年,夏天:151
awk 将其[$1,$9]视为伪多维数组,并插入其内部SUBSEP字符。这记录在GNU Awk 用户指南中,例如:
分会
下标分隔符。它的默认值是“\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
Run Code Online (Sandbox Code Playgroud)
如果你想要一个由字符串的字面值索引的一维数组,你可以使用[$1 "," $9]或更一般的[$1 FS $9](后者确保该解决方案适用于具有其他分隔符的数据):
$ echo 'A,A' | gawk -F, '{col[$1 FS $2]++} END{for(i in col) print i}'
A,A
Run Code Online (Sandbox Code Playgroud)
如果您想要逗号+空格,请在块中使用[$1 FS" " $2]或设置。SUBSEP = FS" "BEGIN