我有以下脚本解析一些|分隔的字段/值对。示例数据看起来像 | 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
问题是我的实际数据需要花费太长时间。我认为>会更快剪切输出到文件但不确定以最快的方式计算“大”中的唯一条目文本文件
答案 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."}'