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,
NR: NR command keeps a current count of the number of input records. Remember that records are usually lines. Awk command performs the pattern/action statements once for each record in a file. NF: NF command keeps a count of the number of fields within the current input record.
$ 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
-F,
splits on ,
NR>1
treat lines after line 1arr[$1]++
increment array arr
(split with ,
) with first column as keyEND{}
block is executed at the end of processing the filefor (a in arr)
iterating over arr
with a
keyprint a
print key , arr[a]
array with a
keyStrip the header row, drop the age field, group the same names together (sort), count identical runs, output in desired format.
tail -n +2 txt.txt | cut -d',' -f 1 | sort | uniq -c | awk '{ print $2, $1 }'
output
bob 2 jim 1 joe 1 mike 3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With