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

  免費注冊 查看新帖 |

Chinaunix

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

[文本處理] 求一個思路,一個文件拆分后的思路 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-09-17 14:40 |只看該作者 |倒序瀏覽
本帖最后由 expert1 于 2013-03-23 16:22 編輯
  1. 有一個文件比較大,大概有100萬行, 我要用腳本對它進行處理,但是由于文件太大,需要20小時左右才能處理完成,時間太長了,我想將這個文件通過split命令拆分為若干文件,然后通過腳本同時處理拆分后的文件。 但是又不知道這個文件會被拆分為幾個文件,不太好判斷,有沒有人有這方面經(jīng)驗啊?給點思路吧。

  2. 總而言之,就是將一個大文件拆成若干小文件,然后多進程的對這些小文件進行處理以縮短處理時間。謝謝了

  3. 問題已經(jīng)得到解決,現(xiàn)在寫以下總結(jié):

  4. 根據(jù)大俠們的建議我將原數(shù)據(jù)及要求重新整理如下:

  5. 將一個日志文件中的關(guān)鍵字及關(guān)鍵字值根據(jù)要求進行排列,以便于sqlldr入庫使用,關(guān)鍵字值之間以逗號分隔。

  6. 日志中,第一種類型的日志:

  7. /abc/aaa_09152011:[15/09/2011 01:28:38:613 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [AP=3.1.5.167;ID=710036098;AS=7;RID=03A7FE80;FWR=CD30;CID=53;IN=710036098;CP=e;RND=75C7B61BCE854DB1B31A4AA8978EEF9B;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=;PL=2364;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.167]
  8. /abc/aaa_09152011:[15/09/2011 01:28:39:694 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=userAuth is [SC=16781312;AP=3.1.5.145;ID=650013208;AS=7;RID=1F605980;FWR=3293;CID=53;IN=650013208;CP=e;RND=90BF88495ECE320D81BD718D27069EC7;N=1000056512;CLD=16781312;LN=zhcn;IID=0;ST=;PL=40065;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]
  9. /abc/aaa_09152011:[15/09/2011 22:42:55:654 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=getMsg&msgID=1 is [SC=16781312;AP=3.1.5.145;ID=241695284;AS=7;RID=A6E53BE5;FWR=3001;CID=53;IN=241695284;CP=e;RND=00CE58723237CE4A4F2C32B103AC62B0;N=1000132973;CLD=16781312;LN=zhcn;IID=0;ST=;PL=90100;TZ=28800;DN=;DIF=;RAWAPI=3.1.5.145]

  10. 第一類日志經(jīng)過處理后,需要得出如下記錄:

  11. 15/09/2011 01:28:38:613 CST,userAuth,,,,,,,,,,,,3.1.5.167,710036098,7,03A7FE80,CD30,53,710036098,e,75C7B61BCE854DB1B31A4AA8978EEF9B,1000056512,16781312,zhcn,0,,2364,28800,,,3.1.5.167,,,,,,,,,,,,,,
  12. 15/09/2011 01:28:39:694 CST,userAuth,,,,,,,,,,,16781312,3.1.5.145,650013208,7,1F605980,3293,53,650013208,e,90BF88495ECE320D81BD718D27069EC7,1000056512,16781312,zhcn,0,,40065,28800,,,3.1.5.145,,,,,,,,,,,,,,
  13. 15/09/2011 22:42:55:654 CST,getMsg,,,,,,,,,,1,16781312,3.1.5.145,241695284,7,A6E53BE5,3001,53,1695284,e,00CE58723237CE4A4F2C32B103AC62B0,1000132973,16781312,zhcn,0,,90100,28800,,,3.1.5.145,,,,,,,,,,,,,,

  14. 以上數(shù)據(jù)是根據(jù) “等號” 為基礎(chǔ)將 左邊的為字段名(變量),右邊的為數(shù)值讀取出后并按照之前設(shè)定好的字段順序排列,之后生成的新文件。由于鍵值太多達到47個,而又不是每條日志包含所有鍵值,在原始日志中的排列順序也不完全一樣,所以在處理結(jié)果中我們可以看出有多個,,,,產(chǎn)生,其間其實為空數(shù)據(jù),而不是人為加入的“逗號”,又由于鍵值中特殊字符,需要做相應(yīng)處理。

  15. 以下為第三種類型數(shù)據(jù),思路一樣只是取得的方法更加麻煩,中括號外數(shù)據(jù)多了點,另外需要取得returns 的值。

  16. /abc/aaa_09152011:[15/09/2011 06:27:23:811 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=12831713&price=455118536&time=1000074117&ID=80127&hw=DEBE60BB36B78CC77BC36D850A1458AD&repeat=12 returns 401 status=0
  17. /abc/aaa_09152011:[15/09/2011 06:27:24:708 CST] AppFac/com.bbb.abba.api.appFac: Client configuration for action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF is [SC=16781312;AP=3.1.5.186;ID=571700982;AS=7;RID=817DB7A3;FWR=v1.03;CID=53;IN=571700982;CP=e;RND=019D63AFB0C678CC2BB7C49FCFFF7E69;N=1000074445;CLD=16781312;LN=zhcn;IID=0;ST=;PL=110006;TZ=28800;DN=58865766;DIF=;RAWAPI=3.1.5.186]
  18. /abc/aaa_09152011:[15/09/2011 06:27:25:862 CST] AppFac/com.bbb.abba.api.appFac: appBuilder on action=msgPkgDeleteACK&appID=13066620&price=479938200&time=999827776&ID=571700982&hw=456CBA28ED71279E1A35B488804F97FF returns 200 status=0

  19. 所以關(guān)鍵字為:$HOSTNAME,$LOCAL_TIME,$action,$AppId,$appID,$itemID,$price,$prevPrice,$prePay,$PkgId,$license,$repeat,$msgID,$SC,$AP,$ID,$AS,$RID,$FWR,$CID,$IN,$CP,$RND,$N,$CLD,$LN,$IID,$ST,$PL,$TZ,$DN,$DIF,$RAWAPI,$AUTH,$API,$PLAT,$LANGUAGE,$CARRIER,$RAND,$time,$HASH,$hw,$txid,$catId,$RETURNS,$status,$AUTHSCHEME

  20. 根據(jù)我的要求,在jason680不斷地幫助下,最后得出以下語句:此語句根據(jù)我的要求在第一個字段加了主機名
  21. 由于是solaris系統(tǒng),該語句只用使用該路徑想的awk才能正常運行
  22. /usr/xpg4/bin/awk -F'[]=; &[]+' -v hn="$HOSTNAME" 'BEGIN{t=47;a["action"]=2;a["AppId"]=3;a["appID"]=4;a["returns"]=44;a["status"]=45;a["AUTHSCHEME"]=46}{delete b;b[1]=$2" "$3;for(n=1;n++<t;)if(a[$n]!="")b[a[$n]]=$(n+1);printf hn",";for(n=0;n++<t;)printf "%s",b[n]",";print""}'

  23. 由于字段太多,4-44之間的多個字段我就不重復(fù)些了。
  24. 對于該語句有不理解的可以看一下 第30樓 jason680大俠有詳細解釋 ,真是太感謝了,又學(xué)到了新東西。
復(fù)制代碼

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

論壇徽章:
0
3 [報告]
發(fā)表于 2011-09-17 16:50 |只看該作者
或許是你處理方法上存在問題啊,你可以說出本意,shell ,awk ,sed, perl處理的效率和算法思路的不同時間 ...
zooyo 發(fā)表于 2011-09-17 15:24



    是這樣的,是處理一段比較混亂的日志,通過eval命令從日志中提取字段信息,并且按照固定格式寫入文件中,為了能夠更好的提取信息,其中作了一些操作也是論壇里的幾個高手幫忙解決的, 比如 多余的特殊字符等問題,我貼一下腳本,請幫忙看看那里還能優(yōu)化。
  1. grep ID /abc/aaa_09152011* | while read line
  2. do
  3. LOCAL_TIME=`echo $line |cut -d\[ -f2| cut -d\] -f1`
  4. eval `echo $line | grep -v returns | grep -v fails|awk '{print $8}' | tr '&' ';' |tr '%' '0'| nawk -F ";" '{printf $1;for(i=2;i<=NF;i++)printf $i~/\=/?";"$i:$i;print ""}' |nawk -F ";" '{for(i=1;i<=NF;i++){gsub(/'\''/,"",$i);sub("=","='\''",$i);sub(/$/,"'\''",$i);printf $i";"};print ""}'`
  5. eval `echo $line | grep -v returns | grep -v fails|awk '{print $10}' | sed 's/^.\(.*\).$/\1/' |tr '%' '0'| nawk -F ";" '{printf $1;for(i=2;i<=NF;i++)printf $i~/\=/?";"$i:$i;print ""}' |nawk -F ";" '{for(i=1;i<=NF;i++){gsub(/'\''/,"",$i);sub("=","='\''",$i);sub(/$/,"'\''",$i);printf $i";"};print ""}'`
  6. eval `echo $line | grep -v returns | grep fails|awk '{print $5}' | tr '&' ';' |tr '%' '0'| nawk -F ";" '{printf $1;for(i=2;i<=NF;i++)printf $i~/\=/?";"$i:$i;print ""}' |nawk -F ";" '{for(i=1;i<=NF;i++){gsub(/'\''/,"",$i);sub("=","='\''",$i);sub(/$/,"'\''",$i);printf $i";"};print ""}'`
  7. eval `echo $line | grep -v returns | grep fails|awk '{print $7}' | sed 's/^.\(.*\).$/\1/' |tr '%' '0'| nawk -F ";" '{printf $1;for(i=2;i<=NF;i++)printf $i~/\=/?";"$i:$i;print ""}' |nawk -F ";" '{for(i=1;i<=NF;i++){gsub(/'\''/,"",$i);sub("=","='\''",$i);sub(/$/,"'\''",$i);printf $i";"};print ""}'`
  8. eval `echo $line | grep returns | awk '{print $7}' | tr '&' ';' |tr '%' '0'| nawk -F ";" '{printf $1;for(i=2;i<=NF;i++)printf $i~/\=/?";"$i:$i;print""}' |nawk -F ";" '{for(i=1;i<=NF;i++){gsub(/'\''/,"",$i);sub("=","='\''",$i);sub(/$/,"'\''",$i);printf $i";"};print ""}'`
  9. eval `echo $line | grep returns | awk '{print $10}'`
  10. RETURNS=`echo $line | grep fails | awk '{print $8}'`
  11. RETURNS=`echo $line | grep returns | awk '{print $9}'`
  12. echo $HOSTNAME,$LOCAL_TIME,$action,$catId,$RETURNS,$status,$AUTHSCHEME >> /tmp/test_2.txt
  13. LOCAL_TIME='';action='';status='';AUTHSCHEME=''
  14. done
復(fù)制代碼
至于后面 輸出字段有 30多個,我就不全貼出來了,就截取了幾個,請幫忙看看是否提高處理速度,還是只能通過文件截取的方法提高速度

論壇徽章:
1
摩羯座
日期:2014-12-29 15:59:36
4 [報告]
發(fā)表于 2011-09-17 17:49 |只看該作者
好強大!

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

論壇徽章:
0
6 [報告]
發(fā)表于 2011-09-17 18:19 |只看該作者
呃,悲劇啊,看來還是要找辦法截斷文件啊,多線程處理。

論壇徽章:
23
15-16賽季CBA聯(lián)賽之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午馬
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16賽季CBA聯(lián)賽之山東
日期:2017-12-21 16:39:1915-16賽季CBA聯(lián)賽之廣東
日期:2016-01-19 13:33:372015亞冠之山東魯能
日期:2015-10-13 09:39:062015亞冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [報告]
發(fā)表于 2011-09-17 18:28 |只看該作者
回復(fù) 6# lightning


優(yōu)化你的腳本吧,比弄什么多線程更實際。
明明1個awk可以解決的事。

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

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
9 [報告]
發(fā)表于 2011-09-17 20:06 |只看該作者
Tim哥說了,一個awk就能搞定,樓主趕緊給點真是數(shù)據(jù)出來吧

論壇徽章:
0
10 [報告]
發(fā)表于 2011-09-17 21:59 |只看該作者
樓主是NB的管道工
但對shell來說,多一個管道,效率就降一級
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP