Awk/Unix group by

awk, unix

Solution

$ awk -F, 'NR>1{arr[$1]++}END{for (a in arr) print a, arr[a]}' file.txt
joe 1
jim 1
mike 3
bob 2

EXPLANATIONS

- `-F,` splits on `,`

- `NR>1` treat lines after line 1

- `arr[$1]++` increment array `arr` (split with `,`) with first column as key

- `END{}` block is executed at the end of processing the file

- `for (a in arr)` iterating over `arr` with `a` key

- `print a` print key `, arr[a]` array with `a` key

Problem

have this text file: ``` name, age joe,42 jim,20 bob,15 mike,24 mike,15 mike,54 bob,21 ``` Trying to get this (count): ``` joe 1 jim 1 bob 2 mike 3 ``` Thanks,

Original source