Порахуйте, скільки разів кожен рядок відображається у файлі


23

Скажіть, у мене є файл, який містить:

A
A
A
B
CC

Я хочу мати такий результат:

A 3
B 1
CC 1

Відповіді:


23

Я зрозумів це; Один з uniqваріантів s - це -c"префіксальні рядки за кількістю входів":

$ uniq -c

1
Зверніть увагу, що цифри ставлять на перше місце. Якщо ви були метушливі щодо замовлення, ви могли б зробити:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
Також зауважте, що він рахує лише суміжні рядки повторення. Поширена ідіомаsort | uniq
Стівен Д

4
uniq також ставить підрахунок перед датою. Оригінальне запитання насправді потребує щось подібне: сортувати назву файлу | uniq -c | awk '{print $ 2, $ 1}'
Брюс Едігер

Якщо це не зрозуміло з вищезазначених коментарів, ви повинні переконатися, що дані впорядковані спочатку для досягнення вашої мети. Якщо це не буде відсортовано, у вас будуть повторювані записи. Наприклад, якби ваш оригінальний файл був замість цього A \ A \ A \ B \ A \ CC, результат просто uniq -cвідображатиметься A 3та пізніше відображатиметься A 1. Сортування по-перше, гарантує, що всі однакові лінії будуть згруповані разом
drootang

16

Я просто прийшов сюди з подібною проблемою. З цього мені вдалося скласти трохи більш вдосконалену команду, яка, сподіваюся, корисна для інших.

Як Стівен Д сказав у коментарях вище, uniqпідраховує лише суміжні повторювані рядки, тому спочатку потрібно сортувати рядки. Після цього ми знаходимо унікальні лінії, після чого знову сортуємо, щоб найчастіше зустрічалися рядки.

sort file.txt | uniq -c | sort -nr > output.txt

Вихідні дані переспрямовуються у файл output.txt. Якщо ви просто хочете переглянути результати в командному рядку, видаліть перенаправлення та змініть останню команду на sort -nтак, щоб найпоширеніший рядок знаходився внизу, тобто, безумовно, все ще знаходився на екрані.


4
Ви можете замінити cat file.txt | sortна просто sort file.txt. :)
mattdm

1
@mattdm: Недоліком цієї рецептури є те, що ви не можете швидко замінити catщось більш цікаве. Оскільки, знаєте, немає cat.
СамБ

1
@SamB Потім запишіть це як < file.txt sort | uniq -c. Це легко відредагувати і все-таки уникає зайвого cat.
hvd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.