【发布时间】:2019-08-16 19:34:11
【问题描述】:
我有以下代码:
awk '{h[$1]++}; END { for(k in h) print k, h[k]}' ${infile} >> ${outfile2}
这是我想要的部分功能:打印出唯一值,然后还计算这些唯一值出现的次数。现在,我还想从每个唯一值中打印出第二列和第三列。由于某种原因,以下似乎不起作用:
awk '{h[$1]++}; END { for(k in h) print k, $2, $3, h[k]}' ${infile} >> ${outfile2}
awk '{h[$1]++}; END { for(k in h) print k, h[$2], h[$3], h[k]}' ${infile} >> ${outfile2}
第一个打印出最后一个索引的第二和第三列,而第二个代码除了 k 和 h[k] 什么都不打印。
${infile} 看起来像:
20600 33.8318 -111.9286 -1 0.00 0
20600 33.8318 -111.9286 -1 0.00 0
30900 33.3979 -111.8140 -1 0.00 0
29400 33.9455 -113.5430 -1 0.00 0
30600 33.4461 -111.7876 -1 0.00 0
20600 33.8318 -111.9286 -1 0.00 0
30900 33.3979 -111.8140 -1 0.00 0
30600 33.4461 -111.7876 -1 0.00 0
期望的输出是:
20600, 33.8318, -111.9286, 3
30900, 33.3979, -111.8140, 2
29400, 33.9455, -113.5430, 1
30600, 33.4461, -111.7876, 2
【问题讨论】:
-
您必须存储一行的整个值,以便您可以在
END块内将其打印出来。$2和$3仅来自读取的最后一行输入,但您的h[](数组)将包含许多条目。认为您将需要另一个数组,以便您可以从您的 uniq 列表中引用正确的NR(但现在没有时间对此进行测试)。祝你好运。