Вы можете сделать это с помощью GNU awk 4.0 :
awk 'END {
for (D in d)
for (E in d[D])
print E, d[D][E]
}
{
d[$1][$2]++
}' infile
В большинстве случаев будет достаточно решения, опубликованного @ Michael J. Barber .
С GNU awk 4.0 вы также можете легко упорядочить значения (в данном примере, упорядоченные по количеству продано):
% awk 'END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (D in d) {
split(D, t, SUBSEP)
print t[1], t[2], d[D]
}
}
{
d[$1, $2]++
}' infile
11/2/2011 mouse 3
10/2/2011 ring 3
10/08/2011 laptop 3
10/2/2011 keyboard 2
10/08/2011 pen 2
10/08/2011 desktop 1
11/2/2011 door 1
10/08/2011 waterbottle 1
10/02/2011 waterbottle 1