Рейтинг:1

Как подсчитать количество последовательных одинаковых строк

флаг in

У меня есть файл, который выглядит так:

2000
2000
2001
2001
2001
2001
2002
2002

Мне нужен скрипт, чтобы показать мне это:

2000 - 2
2001 - 4
2002 - 2

Я предпочитаю использовать sed или awk

флаг hr
Это похоже на то, для чего был придуман `uniq -c`...
Joe Jobs avatar
флаг in
О, красиво, я этого не знал. Спасибо!
bac0n avatar
флаг cn
`uniq -c файл | sed -rn 's/ *([0-9]+) (.*)/\2 - \1/p'`
Рейтинг:1
флаг cn

Это именно то, что уникальный -c делает. От человек уникальный:

ОПИСАНИЕ

Отфильтруйте соседние совпадающие строки из INPUT (или стандартного ввода), записав в OUTPUT (или стандартный вывод).

[ . . . ]

-с, --количество
     префикс строки по количеству вхождений

Таким образом, в вашем примере мы получаем:

$ уникальный -c файл
      2 2000
      4 2001 г.
      2 2002 г.

Вы также можете написать небольшой сценарий, если по какой-то причине предпочитаете. Например, с аук:

$ awk '{ count[$0]++ } END{ for(line in count){ print line,count[line] }}' file 
2000 2
2001 4
2002 2

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.