Определите количество уникальных значений, а затем количество вхождений этих значений в файл

У меня есть файл данных, который содержит 15000 строк, но только 400 уникальных значений. Я ищу способ определить количество уникальных значений, а затем количество вхождений этих значений в файл. Я придумал следующее, но это очень медленно. Есть предположения?

for value in `cat mylist.txt | uniq` do counter=`grep $value mylist.txt |wc -l` echo $value $counter done 

2 Solutions collect form web for “Определите количество уникальных значений, а затем количество вхождений этих значений в файл”

Просто используйте sort и uniq:

 sort mylist.txt | uniq | wc -l 

Это даст вам количество уникальных значений. Чтобы получить количество вхождений каждого уникального значения, используйте параметр uniq -c:

 sort mylist.txt | uniq -c 

На странице uniq man:

  -c, --count prefix lines by the number of occurrences 

Кроме того, для справок в будущем часто используется опция grep -c:

  -c, --count Suppress normal output; instead print a count of matching lines for each input file. With the -v, --invert-match option (see below), count non-matching lines. (-c is specified by POSIX.) 

Попробуй это.

 for w in `cat $file`; do echo $w; done|sort|uniq -c 
  • Подавлять предупреждения от MySQL в сценарии оболочки, но допускать ошибки
  • Пакетное переименование файлов с восходящим числом
  • Получение проблемы с разделителем при выполнении сценария
  • удаление избыточности из выходных столбцов
  • Файлы размером более 1 ГБ и старше 6 месяцев
  • Вставить текст в определенные строки файла? со специальными символами
  • Как создать правило для замены пользовательского флага с помощью оболочки C?
  • Переменная не расширяется внутри другой переменной bash
  • Как передать хеш md5 в оболочку
  • Выберите последний файл, основанный на порядковом номере, указанном в имени файла
  • Команда mv с шаблоном пути, содержащим случайную строку
  • Linux и Unix - лучшая ОС в мире.