0

我有以下脚本可以解析一些 | 分隔的字段/值对。示例数据类似于 |Apple=32.23|Banana =1232.12|Grape=12312|Pear=231|Grape=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

问题是我的实际数据的排序时间太长了。我认为 > 将剪切输出到文件会更快,但不确定计算“大”文本文件中唯一条目的最快方法

4

1 回答 1

3

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."}' 
于 2012-03-07T21:35:56.560 回答