using Linux cut, sort and uniq

user2615699 picture user2615699 · Feb 5, 2014 · Viewed 28.7k times · Source

I have a list with population, year, and county and I need to cut the list, and then find the number of uniq counties.

The list starts off like this:

#Population,    Year,   County
3900,   1969,   Beaver
3798,   1970,   Beaver
3830,   1971,   Beaver
3864,   1972,   Beaver
3993,   1973,   Beaver
3976,   1974,   Beaver
4064,   1975,   Beaver

There is much more to this list, and many more counties. I have to cut out the county column, sort it, and then output the number of uniq counties. I tried this command:

 cut -c3- list.txt | sort -k3 | uniq -c

But this does not cut the third list, nor does it sort it alphabetically. What am I doing wrong?

Answer

favoretti picture favoretti · Feb 5, 2014

You can add a delimiter, which is a comma in your case:

cut -f 3 -d, list.txt | sort | uniq

then, -c specifies character position, rather than field, which is specified with -f.

To strip spaces in front you can pipe this all through, e.g. awk '{print $1}', i.e.

cut -f 3 -d, list.txt | awk '{print $1}' | sort | uniq

[edit]

Aaaaand. If you try to cut the 3rd field out, you are left with only one field after the pipe, so sorting on the 3rd field won't work, which is why I omitted it in my example. You get 1 field, you just sort on it and the apply uniq.