# How do you count the first column generated from uniq -c

I have a file that lists 5 lines of random words "See spot" "See pot run", etc each on a new line. I was able to create code that counted the number of times each word appears in the file and sorted properly.

``````4 Spot
3 run
2 see
1 sees
1 Run
1 Jane
``````

Code I used:

``````cat "FILENAME" | tr ' ' '\n' | sort -n | uniq -c | sort -r
``````

I put each word on a new line, sorted, then counted unique values and sorted again. Now I have to take that count but with this output:

``````3 1
1 2
1 3
1 4
``````

This means there are 3 words with a count of 1, 1 word 2, 1 word 3, 1 word 4.

I am having 2 problems. 1 is how can I get a count of the first column which is already a count from uniq -c. The second problem is deleting the words in the second column and replacing with the original count of 1, 2 ,3, 4.

You could do with something like:

``````tr ' ' '\n' <infile \
| sort -n \
| uniq -c \
| awk '{ seen[\$1]++ } END{for (x in seen) print seen[x], x }'
``````

Or even:

``````tr ' ' '\n' <infile | sort -n | uniq -c|cut -d' ' -f7 |sort |uniq -c
``````

Or better possible to do with `awk` alone:

``````awk '{ seen[\$0]++ }
END{ for (x in seen) count[seen[x]]++; for (y in count) print count[y],y }
' RS='( |\n)+' infile
3 1
1 2
1 3
1 4
``````

In above `awk`, in `seen[\$0]++` for each Record, Separated with either Space or a `\n`ewline stores the whole record into the associated array called `seen` as the key and its value increment when same key seen again.

At the `END{ ... }` when all records read, this block will be executed and for each key (we define `x` as variable index to travers all elements in that array using for loop) saved in array seen we used value of seen `seen[x]` as the key of new array called `count` and again its value increment for the same key.

Later we used another loop and `y` as variable index to print first they values `count[y]` (which are counts) and `y` they keys.