using Linux cut, sort and uniq
Asked Answered
J

2

10

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?

Justice answered 5/2, 2014 at 17:53 Comment(0)
L
17

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.

Limited answered 5/2, 2014 at 18:0 Comment(3)
Cool this works thank you. If I wanted to print the line numbers with the result how would I do that?Justice
in the awk version, you could directly output the third field (ie, no need of cut step)...Starvation
@Justice not sure what you ask for... try to add |cat -nStarvation
S
4

You can use awk to extract third field (space delimited), and then do your sort/uniq stuff.

awk '{print $3}' list.txt |sort |uniq -c
Starvation answered 5/2, 2014 at 18:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.