Порахуйте окремі значення поля у файлі


17

У мене файл містить близько мільйона рядків. У рядках у мене є поле під назвою transactionid, яке має повторювані значення. Що мені потрібно зробити - це чітко їх порахувати.

Незалежно від того, скільки разів значення повторюється, його слід рахувати лише один раз.


було б простіше, якби ви могли просто ознайомитись з форматом файлу. Не обов'язково дані.
Нікхіл Маллі

btw, чи хочете ви, щоб значення зараховувалося як 1, незалежно від того, скільки разів воно існує, або ви хочете рахувати кількість подій / повторень? якщо ви просто хочете, щоб його було підраховано один раз, то як підраховуються різні значення? Чи можете ви, будь ласка, перевірити мою редакцію у вашому запитанні та підтвердити, чи я правий у перекладі.
Нікхіл Мюллі

@Nikhil Це зрозуміло з запитання:... No matter of how many times a value is repeated, it should be counted as 1. ...

добре, тоді відповідь від @hesse зробить вашу потребу.
Нікхіл Мюллі

вибачте за затримку. У мене не було інтернет-зв’язку. сеператор 2 | ' а поле - поле 28. Я використав; cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l пункт if був для чергової перевірки дати, як це здається очевидним :)
Olgun Kaya

Відповіді:


23

Гаразд, якщо припустити, що ваш файл - це текстовий файл із полями, розділеними роздільником комах ','. Ви також знали б, яке поле 'transactionid'з точки зору його позиції. Якщо припустити, що ваше 'transactionid'поле - 7-е поле.

awk -F ',' '{print $7}' text_file | sort | uniq -c

Це підрахувало б різні / унікальні події в 7-му полі та друкує результат.


Чому sortперед uniqкомандою.
g10guang

@ g10guang Becasue для uniqусунення записів, вони повинні бути поруч.
dsz

3

Можливо, не найспаніший метод, але це має працювати:

awk '{print $1}' your_file | sort | uniq | wc -l

де $1число, відповідне поле для розбору.


3

Немає необхідності сортувати файл .. ( uniqвимагає сортування файлу )
Цей сценарій awk передбачає, що поле є першим розділеним полем пробілів.

awk 'a[$1] == "" { a[$1]="X" } END { print length(a) }' file 

Для величезного файлу (як, наближаючись до розміру оперативної пам’яті), awk витратить багато пам’яті. Більшість sortреалізацій розроблені так, щоб добре впоратися з величезними файлами.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.