更好的Python方式

时间:2012-03-02 21:01:21

标签: python bash

在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;

3 个答案:

答案 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)

阅读CSV文件:

  

http://docs.python.org/library/csv.html

Uniquifying:

set(nonUniqueItems)