亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 9414 | 回復(fù): 15
打印 上一主題 下一主題

請教關(guān)于如何判斷awk狀態(tài),退出循環(huán)的問題 [復(fù)制鏈接]

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-04-18 13:08 |只看該作者 |倒序?yàn)g覽
大家好~!
有如下腳本:


#!/bin/bash
#for line in $(<$1);
cat $1 | while read line
#while read line
do
#       echo ${line}
# print AIX version like 5.3.9.1
        echo $line |    awk -F',' '/AAA,AIX/ { print $3 }'
# print report date ,like 15-APR-2011
        echo $line |    awk -F',' '/AAA,date,/ { print $3 }'
# print report time ,like 16:36:49
        echo $line |    awk -F',' '/^AAA,time,/ { print $3 }'
#done < $1
done

這個腳本,基本意思是:
從$1接收一個文件,每次讀取一行的內(nèi)容,然后用awk來過濾這一行,碰到匹配的,就打印$3列。


現(xiàn)在的問題是,這個腳本,會將讀取的每一行都與下面所有的awk語句來匹配,即使在第1行,已經(jīng)匹配到了合適的條件了,也要繼續(xù)匹配剩下的所有awk行。這樣的話,很浪費(fèi)系統(tǒng)資源。

我想請教大家,如何做?使得awk一旦匹配出了合適的行,就退出while循環(huán),再來讀取下一行做匹配?

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
2 [報(bào)告]
發(fā)表于 2011-04-18 13:16 |只看該作者
本帖最后由 yinyuemi 于 2011-04-18 13:19 編輯

加exit;

例如:

awk -F',' '/AAA,date,/ { print $3 ;exit}'

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
3 [報(bào)告]
發(fā)表于 2011-04-18 13:21 |只看該作者
加exit;

例如:

awk -F',' '/AAA,date,/ { print $3 ;exit}'
yinyuemi 發(fā)表于 2011-04-18 13:16



   謝謝你的回復(fù)。不過好像沒有退出阿~!
#!/bin/bash
#for line in $(<$1);
cat $1 | while read line
#while read line
do
#       echo ${line}
# print AIX version like 5.3.9.1
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
# print report date ,like 15-APR-2011
        echo $line |    awk -F',' '/^AAA,date,/ { print $3;exit }'
# print report time ,like 16:36:49
        echo $line |    awk -F',' '/^AAA,time,/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'
#done < $1
done


[root@vistor itools]# time ./test.sh Orasvr_110418_1110.nmon
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
6.1.6.1
11:10:19
18-APR-2011

real    0m28.805s
user    0m4.199s
sys     0m9.883s




我加了幾行到里面,然后一跑,發(fā)現(xiàn)每讀取一行,還是把所有后面的awk判斷語句都做了比對,從結(jié)果中就可以看出,打印了很多重復(fù)的行。

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亞洲杯之阿曼
日期:2015-04-07 20:00:59
4 [報(bào)告]
發(fā)表于 2011-04-18 13:22 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
5 [報(bào)告]
發(fā)表于 2011-04-18 13:24 |只看該作者
回復(fù) 3# donggua0713


    sorry,開始沒大看清你的意思
我覺得你可以試試這樣:

cat $1 |awk -F ',' '
/^AAA,AIX/ { print $3 }
/AAA,date,/ { print $3}
/AAA,time,/ { print $3;exit }'

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
6 [報(bào)告]
發(fā)表于 2011-04-18 13:24 |只看該作者
回復(fù)  yinyuemi


    學(xué)習(xí),學(xué)習(xí),謝謝前輩。樓主也很細(xì)心,文件行數(shù)小倒沒事,行數(shù)巨大的話,運(yùn)行起來 ...
zooyo 發(fā)表于 2011-04-18 13:22



    目前我的測試文件有1300多行,不排除有2萬多,3萬行的文件。而且這樣的文件可能有N×100個,所以效率很成問題。現(xiàn)在看來,可能shell不能勝任這樣的工作。

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
7 [報(bào)告]
發(fā)表于 2011-04-18 13:26 |只看該作者
回復(fù)  donggua0713


    sorry,開始沒大看清你的意思
我覺得你可以試試這樣:

cat $1 |awk -F ', ...
yinyuemi 發(fā)表于 2011-04-18 13:24



這樣不行的,還是在最后一個awk語句之后退出,我希望一旦匹配到,就退出,比如:


    # print AIX version like 5.3.9.1
        echo $line |    awk -F',' '/^AAA,AIX/ { print $3;exit }'

當(dāng)讀到一行內(nèi)容是AAA,AIX,abcdef的時(shí)候,打印abcdef,然后退出當(dāng)前while循環(huán),就不繼續(xù)對比下一個awk語句了。

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
8 [報(bào)告]
發(fā)表于 2011-04-18 13:27 |只看該作者
本帖最后由 donggua0713 于 2011-04-18 13:29 編輯

還有個問題,大家看到我的腳本,注釋掉了for循環(huán)的語句。因?yàn)槲覝y試過,其他語句都相同,使用for循環(huán),和使用while循環(huán),性能差異巨大。for循環(huán)耗費(fèi)的時(shí)間,是while循環(huán)的6倍。

不知道大家還有什么好的辦法,提高循環(huán)的效率?


我這個腳本,肯定寫得不好,所以跑一次測試腳本,1300行,3個判斷條件,要6秒左右。

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
9 [報(bào)告]
發(fā)表于 2011-04-18 13:29 |只看該作者
回復(fù) 7# donggua0713


    如果是匹配任意一個就退出的話:

cat $1 |awk -F ',' '
/^AAA,AIX/ || /AAA,date,/ || /AAA,time,/ { print $3;exit }'

論壇徽章:
2
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-25 06:20:00
10 [報(bào)告]
發(fā)表于 2011-04-18 13:31 |只看該作者
回復(fù)  donggua0713


    如果是匹配任意一個就退出的話:

cat $1 |awk -F ',' '
/^AAA,AIX/ || /A ...
yinyuemi 發(fā)表于 2011-04-18 13:29



    如果我 awk前面的匹配部分,有上百個條件,這樣寫很痛苦阿
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP