藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教關於取文本的幾個小問題

比如說有很多類似的文件,名稱為 db_ora1_1122.trc, db_ora1_1123.trc, db_ora2_2122.trc,等等,每個文件中前幾行的內容如下:

*** SESSION ID:(498.56178) 2005-04-09 14:05:23.071
*** 2005-04-09 14:05:23.071
ksedmp: internal or fatal error
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
Current SQL statement for this session:
select count(*) from (select c.*,d.........
----- Call Stack Trace -----

。。。。。。(後面還有很多)

有兩個問題想請教大家;
1,如果像把每個文件中的第6行,取出來,然後放到一個單獨的文件中,然後追加到新文件中一個空行,然後再取一個行,追加到其中。。。
2,如果想把每個文件的以「Current SQL statement for this session:」開頭的一行開始,順次取5行,然後追加到新文件中一個空行,然後再取另一個文件的,。。。。。
3,如果想把每個文件的以「Current SQL statement for this session:」開頭,以「----- Call Stack Trace -----」結尾的一段話放到一個單獨的文件中,然後追加到新文件中一個空行,然後再取另一個文件的,。。。。。

先解過各位大俠。

請教關於取文本的幾個小問題

for i in db_ora*.trc; do sed -ne '6{G;p;q}'  ; done >your-file

其它類推

請教關於取文本的幾個小問題

多謝 waker了,呵呵。

我是新手,手笨,可不可以再幫忙考慮一個問題啊:
比如,file1中有類似如下的內容:
err001... info...
aaaaa
bbbbb
trace file name is db_trace1_aaa.trc
...
err001... info...
ccccc
bbbbb
trace file name is db_trace2_bbb.trc
...

等等,也就是說,file1中,凡是以「err001」開頭到「trace file name」的結尾的這些片斷的內容是我需要的一部分信息。其中,db_trace1_aaa.trc和db_trace2_bbb.trc等等的trace文件中記錄了關於err001這個錯誤的相關跟蹤信息。我希望提取這部分內容放到一個log文件中,另外還有下面的:

db_trace1_aaa.trc等trace文件的內容類似於:

*** SESSION ID:(498.56178) 2005-04-09 14:05:23.071
*** 2005-04-09 14:05:23.071
ksedmp: internal or fatal error
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
Current SQL statement for this session:
select count(*) from (select c.*,d.........
----- Call Stack Trace -----

。。。。。。(後面還有很多)

我希望提取每個跟蹤文件的這部分內容再寫入到一個log文件中。

也就是說,最後生成的log文件的內容如下:
err001... info...
aaaaa
bbbbb
trace file name is db_trace1_aaa.trc

*** SESSION ID:(498.56178) 2005-04-09 14:05:23.071
*** 2005-04-09 14:05:23.071
ksedmp: internal or fatal error
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
Current SQL statement for this session:
select count(*) from (select c.*,d.........
----- Call Stack Trace -----


err001... info...
ccccc
bbbbb
trace file name is db_trace2_bbb.trc

*** SESSION ID:(111.5617222) 2005-04-09 14:05:23.071
*** 2005-06-29 02:05:23.071
ksedmp: internal or fatal error
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
Current SQL statement for this session:
select count(*) from (select c.*,d.........
----- Call Stack Trace -----


請問,大俠這個如何實現比較好啊?

也就是說,讀取一個文件的一段關鍵文字,得到trace文件名稱等關鍵信息,再去這個trace文件中讀取一段詳細的錯誤信息。

先謝過大俠了。

請教關於取文本的幾個小問題

up

請教關於取文本的幾個小問題

這麼多大俠,哪位大俠幫忙看看吧,多謝了 :D

請教關於取文本的幾個小問題

用awk就可以實現,先找到錯誤片斷寫入log,然後找到關聯文件,打開並
截取一段一併放入log。
只要把getline 命令用好就可以了。還有close,文件多了要及時關閉。

請教關於取文本的幾個小問題

非常感謝您的思路了,不過兄弟我最近學習shell的時間不常,這個活也是個著急的活,能夠請兄弟幫忙給出一段實例代碼,實在不好意思了,先寫過大俠了。

請教關於取文本的幾個小問題

不會是給JP賣命吧,那我就慘了。
[code]awk '/^err001/{print;getline;print;getline;print;getline;print
;f=$5;while($0!~"----- Call Stack Trace -----"){getline<f;print;};close(f);}' file1[/code]

請教關於取文本的幾個小問題

非常感謝老大的例子,呵呵 :)

btw:
JP是什麼阿? :D

請教關於取文本的幾個小問題

日本

請教關於取文本的幾個小問題

看起來時差很嚴重訥 :mrgreen:

請教關於取文本的幾個小問題

沒給jp賣命,呵呵,是國產的公司 :)



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com