Disons que j’ai un fichier avec trois colonnes, comme suit:
00:00:01 Login Steve 00:00:01 Install Sarah 00:00:01 Install Sarah 00:00:02 Explorer Sarah 00:00:02 Explorer Sarah 00:00:02 Install Steve 00:00:02 Firewall Sarah 00:00:02 Logout Steve 00:00:04 Logout Sarah
Est-il possible d’utiliser awk pour compter les actions uniques que chaque utilisateur effectue dans chaque horodatage, de sorte que la sortie est quelque chose comme ceci:
00:00:01 Steve Login 1 00:00:01 Sarah Install 2 00:00:02 Sarah Explorer 2 00:00:02 Steve Install 1 00:00:02 Sarah Firewall 1 00:00:02 Steve Logout 00:00:04 Sarah Logout
C’est le plus proche que je vienne:
awk '{count[$1,$3,$2]++}END{for (i in count){split(i,a,SUBSEP); print a[1],a[2],count[i]}}' awktest.txt
Ce qui me donne ce résultat:
00:00:02 Sarah 1 00:00:02 Steve 1 00:00:02 Steve 1 00:00:01 Steve 1 00:00:04 Sarah 1 00:00:02 Sarah 2 00:00:01 Sarah 1 00:00:01 Sarah 1
Je le fais dans Cygwin.
$ awk -F"\t" -v OFS="\t" '{arr[$0]+=1} END {for(i in arr) print i,arr[i]}' test.in 00:00:01 Install Sarah 2 00:00:04 Logout Sarah 1 00:00:02 Firewall Sarah 1 00:00:01 Login Steve 1 00:00:02 Logout Steve 1 00:00:02 Install Steve 1 00:00:02 Explorer Sarah 2