排序和计数方法比cat文件更快排序| uniq -c

时间:2012-03-07 21:26:38

标签: sorting cat uniq

我有以下脚本解析一些|分隔的字段/值对。示例数据看起来像 | Apple = 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

问题是我的实际数据需要花费太长时间。我认为>会更快剪切输出到文件但不确定以最快的方式计算“大”中的唯一条目文本文件

1 个答案:

答案 0 :(得分: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."}'