日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

perl python文本处理_awk, python, perl文本处理效率对比(zz)

發(fā)布時(shí)間:2024/9/19 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 perl python文本处理_awk, python, perl文本处理效率对比(zz) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載,比較結(jié)果不一定正確,比較設(shè)計(jì)不一定科學(xué).

以下3個(gè)文件依次是用python、awk和perl寫的腳本,做同一件事情:

diff.sh f1 f2

f1和f2每一行的第一個(gè)字段(以空格分割)為key,如果f2某一行的key在f1中不存在,則輸出f2該行。

比如:

a.dat的內(nèi)容是

1 a

2 a

b.dat的內(nèi)容是

1 b

3 b

那么diff.sh a.dat b.dat則輸出

3 b

代碼:

#!/usr/bin/python

import sys

if len(sys.argv) != 3:

print "Usage: " + sys.argv[0] + "file1 file2";

sys.exit(-1);

file1 = sys.argv[1]

file2 = sys.argv[2]

list1 = {};

for line in open(file1):

list1[line.split()[0]] = 1;

for line in open(file2):

key = line.split()[0];

if key not in list1:

sys.stdout.write(line)

#!/bin/sh

if [[ $# < 2 ]];then

echo "Usage: $0 file1 file2"

exit

fi

function do_diff()

{

if [[ $# < 2 ]];then

echo "Usage: $0 file1 file2"

return 1

fi

if [[ ! -f $1 ]];then

echo "$1 is not file"

return 2

fi

if [[ ! -f $2 ]];then

echo "$2 is not file"

return 3

fi

awk '

BEGIN{FS=OFS=" "}

ARGIND == 1 {

arr[$1] = 1;

}

ARGIND == 2 {

if (!($1 in arr)) {

print $0;

}

}

' $1 $2

}

do_diff $1 $2

#!/usr/bin/perl -w

exit if (1 > $#ARGV);

my %map_orig;

my $file_orig = shift @ARGV;

open FH, "

while () {

chomp;

#$map_orig{$_} = 1;

my ($filed) = split /\s+/;

$map_orig{$filed} = 1;

}

close (FH);

my $file_diff = shift @ARGV;

open FH, "

while () {

chomp;

my ($filed) = split /\s+/;

print "$_\n" if (!defined$map_orig{$filed});

}

close (FH)

測(cè)試方法:time diff.xx f1 f2 > out

測(cè)試文件f1有107375330行,每一行格式為:

key value(兩個(gè)字段)

文件大小為2.2G

f2有473951行,每一行的格式也是:

key value(兩字段)

文件大小為5.9M

測(cè)試結(jié)果:

diff.py的時(shí)間為3m24.687s = 205s

diff.sh的時(shí)間為3m39.762s = 220s

diff.pl的時(shí)間為5m49.478s = 349s

結(jié)果顯示awk和python的性能差不多,perl則要明顯差些。看來python的dict優(yōu)化得很好,居然能趕上awk的性能,很出乎我的意料。

總結(jié)

以上是生活随笔為你收集整理的perl python文本处理_awk, python, perl文本处理效率对比(zz)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。