我正在尝试将我的 perl one-liners 转换为pyp。我的第一次尝试是作为另一个问题的答案
pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"
然而,事实证明这非常慢。如果我使用创建测试文件
for j in xrange(50000):
print ",".join(str(i) for i in [random.choice(xrange(1000)) for i in xrange(8)])
然后运行
time (cat testmedium.txt |~/.local/bin/pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm" > /dev/null)
我明白了
real 1m27.889s
user 1m26.941s
sys 0m0.688s
然而 perl 中的等价物几乎是即时的。
time (cat testmedium.txt |perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %=12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }' > /dev/null)
real 0m0.196s
user 0m0.192s
sys 0m0.012s
对于较大的测试文件,差异更加显着。