一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Shell下三種遍歷文件的方法比較

 昵稱mschI 2012-03-20

昨天一個同事遇到一個需求:

有一個日志文件A,當(dāng)日志文件中的某行包含某個字符串BC時,將字符串EF變成EG,并輸出到新文件。即:

Input,A:

asdfasdf

asdfasdBCasdfEFasd

 

output:

asdfasdf

asdfasdBCasdfEGasd

 

這個文件有500w+行。

最開始用如下腳本解決:

 

cat $1 | while read line
do
 echo $line | grep -q "BC"
if [ $? -eq 0 ] ; then
 echo $line | sed "s/EF/EG/g" >> $1.out
else
 echo $line >>$1.out
fi
done

 

 

上述腳本在循環(huán)中使用了grep、sed等外部命令,由于外部命令要fork一個process,因此效率極為低下。初步估計,運(yùn)行完要25個小時以上。因此將循環(huán)中的grep和sed替換掉,見如下:

 

 

cat $1 | while read line
do
    [[ "$line" == *"BC"* ]] && echo ${line/EF/EG} || echo ${line}
done

 

循環(huán)內(nèi)部的代碼簡潔了很多,而且吧grep、sed等external command替換掉,在循環(huán)內(nèi)部不會再有process 被fork出來。雖然執(zhí)行效率提高很多,但也沒有在我的耐心區(qū)間內(nèi)得到結(jié)果,初步估算執(zhí)行完需要半個小時以上。

問題應(yīng)該不在循環(huán)內(nèi)部,而是這種cat+while+read遍歷文件內(nèi)容的方式有問題。

 

 

換了awk的方式來做:

 

#!/bin/awk -f

{
    if(match($0,"BC")){
        print gsub("EF","EG");
    }
    else{
        print $0;
    }
}

 這次效率有很大的提升,耗時18秒就出來了結(jié)果。

按理說這已經(jīng)比較滿足需求了。

 

不過,我的同事又試了另外一種方法,用perl解決問題:

–這段代碼是我一個同事寫的。

 

#!/usr/bin/perl
open URLFILE, ">>aa";
my $cnt=0;

while (<>)
{

        if (/BC/)
        {
                s/EF/EG/g;
        }
        print URLFILE $_;
}

 

這段代碼的執(zhí)行效率很高,比awk效果還要好,13秒。

按理說,就讀取文件的效率來說,perl雖然很快但應(yīng)該不會比awk快。

 

只是這個Perl中所做的工作只是讀取文件的一行,而awk在讀取完一行后,還要按照分隔符將$0劃分成一個個字段,分別存在$1,,,$n中,只是,我們這個需求并沒有用到這個功能,用awk解決這個需求還是有點(diǎn)大材小用了。

 

 

關(guān)于在shell下用什么方法來完成對文件的高效遍歷,還有什么更好的方法嗎?

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品熟女在线视频| 在线观看视频成人午夜| 女生更色还是男生更色| 成人亚洲国产精品一区不卡| 欧美日韩亚洲国产av| 欧美色婷婷综合狠狠爱| 亚洲欧美日韩色图七区| 日本黄色美女日本黄色| 精品一区二区三区乱码中文| 青青草草免费在线视频| 东京不热免费观看日本| 婷婷色香五月综合激激情| 日本人妻的诱惑在线观看| 十八禁日本一区二区三区| 国产一区二区三区色噜噜| 亚洲中文字幕熟女丝袜久久| 日韩高清毛片免费观看| 三级理论午夜福利在线看| 国产日韩久久精品一区| 女生更色还是男生更色 | 美女黄片大全在线观看| 亚洲中文字幕在线观看黑人 | 黄片免费播放一区二区| 日韩欧美一区二区黄色| 久久精品a毛片看国产成人| 欧美一区二区不卡专区| 日韩人妻一区中文字幕| 国产精品日韩欧美第一页| 欧美人与动牲交a精品| 日本一品道在线免费观看| 日本加勒比在线观看不卡| 97人妻精品免费一区二区| 欧美做爰猛烈叫床大尺度| 欧美日韩三区在线观看| 中字幕一区二区三区久久蜜桃| 99少妇偷拍视频在线| 精品推荐国产麻豆剧传媒| 激情内射亚洲一区二区三区| 在线观看国产午夜福利| 狠狠亚洲丁香综合久久| 九九热这里只有精品视频|