Подсчитать различные значения поля в файле


17

У меня есть файл, содержащий около миллиона строк. В строках у меня есть поле с именем transactionid, которое имеет повторяющиеся значения. Что мне нужно сделать, так это считать их отчетливо.

Независимо от того, сколько раз значение повторяется, оно должно учитываться только один раз.


было бы проще, если бы вы могли просто взглянуть на формат файла ... не обязательно на данные.
Nikhil Mulley

Кстати, вы хотите, чтобы значение считалось как 1, независимо от того, сколько раз оно существует, или вы хотите подсчитать количество вхождений / повторений? если вы просто хотите, чтобы он был посчитан один раз, то как подсчитываются различные значения? Можете ли вы проверить мои правки по вашему вопросу и подтвердить, правильно ли я интерпретирую.
Nikhil Mulley

@Nikhil Это ясно из вопроса:... No matter of how many times a value is repeated, it should be counted as 1. ...

хорошо, тогда ответ от @hesse сделает вашу нужду.
Nikhil Mulley

извините за задержку. У меня не было подключения к интернету. разделитель 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.