Метод сортировки и подсчета быстрее, чем файл cat | сортировать | уникальный -c

У меня есть следующий скрипт, который анализирует некоторые | пары поле/значение с разделителями. Пример данных выглядит так: |Яблоко=32,23|Банан=1232,12|Виноград=12312|Груша=231|Виноград=1231|

Я просто хочу подсчитать, сколько раз имена полей A, B или C появляются в файле журнала. Список полей должен быть динамическим. Файлы журналов «большие», около 500 мегабайт каждый, поэтому сортировка каждого файла занимает некоторое время. Есть ли более быстрый способ подсчета после того, как я сделаю разрез и получу файл с одним полем в строке?

 cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 | sort | uniq -c > /data/logs/$dir/$file.txt.count

Я точно знаю, что эта часть работает быстро. Я с уверенностью вижу, что он увязает в сортировке.

cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 

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

Apple
Banana
Grape
Pear
Grape

После сортировки и подсчета я получаю

 1 Apple
 1 Banana 
 1 Pear
 2 Grape

Проблема в том, что сортировка моих фактических данных занимает слишком много времени. Я думаю, что было бы быстрее> выводить вырезку в файл, но не уверен, что это самый быстрый способ подсчета уникальных записей в «большом» текстовом файле.


person personalt    schedule 07.03.2012    source источник
comment
разместите некоторые образцы данных и ур желаемого o/p   -  person Teja    schedule 08.03.2012
comment
ладно.. все будет хорошо   -  person Teja    schedule 08.03.2012
comment
быстрее, чем cat file | sort sort file.   -  person Benoit    schedule 04.06.2012


Ответы (1)


AWK может делать это довольно хорошо без сортировки, попробуйте это, должно работать лучше;

cat test.txt | tr -s "|" "\n" | cut -d "=" -f 1 |
   awk '{count[$1]++}END{for(c in count) print c,"found "count[c]" times."}' 
person Joachim Isaksson    schedule 07.03.2012
comment
Спасибо .. попробую это с набором образцов через несколько минут - person personalt; 08.03.2012