- 論壇徽章:
- 0
|
本帖最后由 expert1 于 2013-03-23 16:22 編輯
- 有一個文件比較大,大概有100萬行, 我要用腳本對它進行處理,但是由于文件太大,需要20小時左右才能處理完成,時間太長了,我想將這個文件通過split命令拆分為若干文件,然后通過腳本同時處理拆分后的文件。 但是又不知道這個文件會被拆分為幾個文件,不太好判斷,有沒有人有這方面經(jīng)驗啊?給點思路吧。
- 總而言之,就是將一個大文件拆成若干小文件,然后多進程的對這些小文件進行處理以縮短處理時間。謝謝了
- 問題已經(jīng)得到解決,現(xiàn)在寫以下總結(jié):
- 根據(jù)大俠們的建議我將原數(shù)據(jù)及要求重新整理如下:
- 將一個日志文件中的關(guān)鍵字及關(guān)鍵字值根據(jù)要求進行排列,以便于sqlldr入庫使用,關(guān)鍵字值之間以逗號分隔。
- 日志中,第一種類型的日志:
- /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]
- /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]
- /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]
- 第一類日志經(jīng)過處理后,需要得出如下記錄:
- 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,,,,,,,,,,,,,,
- 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,,,,,,,,,,,,,,
- 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,,,,,,,,,,,,,,
- 以上數(shù)據(jù)是根據(jù) “等號” 為基礎(chǔ)將 左邊的為字段名(變量),右邊的為數(shù)值讀取出后并按照之前設(shè)定好的字段順序排列,之后生成的新文件。由于鍵值太多達到47個,而又不是每條日志包含所有鍵值,在原始日志中的排列順序也不完全一樣,所以在處理結(jié)果中我們可以看出有多個,,,,產(chǎn)生,其間其實為空數(shù)據(jù),而不是人為加入的“逗號”,又由于鍵值中特殊字符,需要做相應(yīng)處理。
- 以下為第三種類型數(shù)據(jù),思路一樣只是取得的方法更加麻煩,中括號外數(shù)據(jù)多了點,另外需要取得returns 的值。
- /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
- /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]
- /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
- 所以關(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
- 根據(jù)我的要求,在jason680不斷地幫助下,最后得出以下語句:此語句根據(jù)我的要求在第一個字段加了主機名
- 由于是solaris系統(tǒng),該語句只用使用該路徑想的awk才能正常運行
- /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""}'
- 由于字段太多,4-44之間的多個字段我就不重復(fù)些了。
- 對于該語句有不理解的可以看一下 第30樓 jason680大俠有詳細解釋 ,真是太感謝了,又學(xué)到了新東西。
復(fù)制代碼 |
|