在Python中有没有更好/更简单的方法来实现这一目标?
我有一个计算CPS(每秒呼叫数)的bash脚本。它在小文件上运行良好,但在大文件上运行不佳。它基本上取我们正在计算CPS的文件并提取字段7,它是INVITING时间,排序,并且只获取唯一值。这全部放在tmp.file中。然后该脚本将原始文件和grep用于tmp.file中的每个值,对它们进行计数,并将时间和计数输出到最终文件。
#!/bin/bash
cat $1 |cut -d "," -f 7 | sort |uniq > /tmp/uniq.time.txt;
list="/tmp/uniq.time.txt";
while read time
do
VALUE1=`cat $1 |grep "$time" |wc -l`;
echo $VALUE1 >> /tmp/cps.tmp;
done < $list;
rm /tmp/cps.tmp;
答案 0 :(得分:3)
我认为你要做的只是:
cat $1 |cut -d "," -f 7 | sort | uniq -c
注意:如果您想交换字段的顺序:
| awk -F " *" '{print $3, $2}'
答案 1 :(得分:1)
在Python中,这当然可以更容易,更有效地完成:
import sys
from itertools import groupby
with open(sys.argv[1]) as f:
times = [line.split(",")[6] for line in f]
times.sort()
for time, occurrences in groupby(times):
print time, len(list(occurrences))
您的方法存在的问题是您必须为每个独特的时间搜索整个文件。你甚至可以在bash中更有效地写这个,但我认为用Python做这个更方便。
答案 2 :(得分:-1)