У меня есть следующий скрипт, который анализирует некоторые | пары поле/значение с разделителями. Пример данных выглядит так: |Яблоко=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
Проблема в том, что сортировка моих фактических данных занимает слишком много времени. Я думаю, что было бы быстрее> выводить вырезку в файл, но не уверен, что это самый быстрый способ подсчета уникальных записей в «большом» текстовом файле.
cat file | sort
sort file
. - person Benoit   schedule 04.06.2012