Perl 板


LINE

這是目前我手上的資料內容,因為它的內容很多,而現階段我只要用到其中兩項的資料, 所以試著寫個程式去抓取,結果一直沒辦法達成我想要的目標! 檔案部分內容: ID 108_SOLLC Reviewed; 102 AA. AC Q43495; DT 15-JUL-1999, integrated into UniProtKB/Swiss-Prot. DR PIR; S26409; S26409. DR RefSeq; XP_004228450.1; XM_004228402.1. DR EnsemblPlants; Solyc01g009590.2.1; Solyc01g009590.2.1; Solyc01g009590.2. DR GeneID; 544145; -. ID 109_SOLLC Reviewed; 102 AA. AC Q43400; DT 15-JUL-1999, integrated into UniProtKB/Swiss-Prot. DR RefSeq; XP_004228450.1; XM_004228402.1. DR RefSeq; XP_004228451.1; XM_004228403.1. DR UniGene; Les.3896; -. DR KEGG; sly:544145; -. ID 110_SOLLC Reviewed; 102 AA. AC Q43499; DT 15-JUL-1999, integrated into UniProtKB/Swiss-Prot. DR RefSeq; XP_004228450.1; XM_004228402.1. DR RefSeq; XP_004228451.1; XM_004228403.1. DR EnsemblPlants; Solyc01g009999.2.1; Solyc01g009999.2; DR UniGene; Les.3896; -. DR KEGG; sly:544145; -. 這是我試著寫的程式碼: #!/usr/bin/env -perl -w open my $file, "<", @ARGV; while (<$file>) { if (/^AC/) { $_ =~ /(\w{6})/; print "$1\t" if ($1); } if (/^DR/) { $_ =~ /(Solyc\w+\.\d)/; print "$1\n" if ($1); } } close $uniprot; 上述程式碼輸出的結果會像這樣: Q43495 Solyc01g009590.2 Q43400 Q43999 Solyc01g009999.2 可是我想排出來的樣式是: Q43495 Solyc01g009590.2 Q43000 Q43999 Solyc01g009999.2 如果我把加了一個判斷式在裡面,沒有比對到的部分就會變成空白行 :( if (/^DR/) { $_ =~ /(Solyc\w+\.\d)/; print ($1) ? "$1\n" : "\n"; } 請問,我該如何修改它,才能輸出成我想要的格式?謝謝 另外想問個問題,我在書上看到能進行多行的比對, 但書上的例子是整個內容一起比, 像上面的例子,可以看出來它是由「ID」開頭的一行做為一個段落的起點, 然後接著數目不定的行數, 下一個「ID」才是另一個段落的開始。 我能夠只針對兩個「ID」之間的內容進行比對嗎? 謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.184.134
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Perl/M.1399397472.A.A26.html
1F:推 CindyLinz:print($1 ? "$1\n" : "\n"); 05/07 03:15
2F:→ CindyLinz:然後你後面問的問題, 通常是用兩層迴圈, 外層把 ID 截出 05/07 03:16
3F:→ CindyLinz:來, 然後內層再處理截出來的內容 05/07 03:16
4F:→ CindyLinz:想耍帥才用一個 regex 搞定配 (?{ CODE }) 吃 XD 05/07 03:17
5F:→ chong:不行耶,因為由 DR 開頭的行數不只一行,當它比對不到時, 05/07 09:47
6F:→ chong:就變成輸出 \n ,這樣一來就有很多空行了,該怎麼讓程式 05/07 09:48
7F:→ chong: ^^^^打錯 05/07 09:49
8F:→ chong:有沒有辦法能一次針對 DR 開頭的行,一起比對,用"//m" ? 05/07 09:50
9F:→ AntaresStar:如果你不介意最上面多一行空行 可以把\n換到Qxx前面 05/07 12:56
10F:→ chong:Good, 感謝各位! 05/10 17:40
11F:→ hhs66317:如果你不嫌麻煩的話﹐可以加一個$flag﹐通過判斷$flag標 06/01 09:44
12F:→ hhs66317:識來決定加\n。 06/01 09:45







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP