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

У меня есть файл данных, который содержит 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 
  • Обновление файла / etc / sudoers в bash
  • изменить шаблон, удалив пробелы?
  • запустить pm2 из удаленного сценария оболочки
  • Как скопировать все файлы, которые были созданы или изменены за последние 12 месяцев?
  • Как использовать функцию return в качестве условия if, а затем shortcut?
  • Передача переменных в шаблоны диапазонов в awk
  • Принуждение к расширению глобального псевдонима частью слова
  • Выделение подстроки с помощью expr
  • Как заменить все первые вхождения в совпадающие строки с инкрементным числом?
  • В сценарии проверьте, не поступает ли стандартный ввод из файла или канала
  • как разбить строку после сопоставления определенного символа с помощью команды оболочки?
  • Linux и Unix - лучшая ОС в мире.