2014-02-05 3 views
3

У меня есть список с населением, годом и округом, и мне нужно вырезать список, а затем найти число округов uniq.с использованием Linux cut, sort и uniq

Список начинается так:

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

Существует гораздо больше в этот список, и многие другие округа. Мне нужно вырезать колонку графства, сортировать ее, а затем выводить количество округов uniq. Я пробовал эту команду:

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

Но это не отрезает третий список и не сортирует его по алфавиту. Что я делаю не так?

ответ

8

Вы можете добавить разделитель, который является запятая в вашем случае:

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

тогда -c определяет характер позиции, а не поле, которое указано с -f.

Чтобы полоса пространства впереди, вы можете проложить все это, например. awk '{print $1}', т.е.

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

[править]

Aaaaand. Если вы попробуете cut 3-е поле, вы оставите только одно поле после трубы, поэтому сортировка по 3-му полю не будет работать, поэтому я опустил его в своем примере. Вы получаете 1 поле, вы просто сортируете его и применяете uniq.

+0

Прохладный это работает спасибо. Если бы я хотел напечатать номера строк с результатом, как бы я это сделал? –

+2

в версии 'awk' вы можете напрямую вывести третье поле (т. Е. Не нужно« вырезать ») ... – FabienAndre

+0

@ user2615699 не уверен, что вы просите ... попробуйте добавить' | cat -n' – FabienAndre

3

Вы можете использовать awk, чтобы извлечь третье поле (пробел), а затем сделать свой материал sort/uniq.

awk '{print $3}' list.txt |sort |uniq -c 
Смежные вопросы