2017-08-30 68 views
0

我想提取一個模式,並打印該行的起始字符串。 輸入如何打印行的第一列以及特定圖案?

Saureus1000(37 genes,10 taxa): Saureus08BA02176_00020(Saureus08BA02176) Saureus1269_00069(Saureus1269) Saureus170_00062(Saureus170) Saureus71193_00020(Saureus71193) SaureusED133_00019(SaureusED133) SaureusED98_00019(SaureusED98) SaureusLGA251_00019(SaureusLGA251) SaureusN305_00605(SaureusN305) SaureusRF122_00019(SaureusRF122) SaureusST398_00020(SaureusST398) Saureus08BA02176_01763(Saureus08BA02176) Saureus08BA02176_01805(Saureus08BA02176) Saureus08BA02176_01808(Saureus08BA02176) Saureus1269_01194(Saureus1269) Saureus1269_(Saureus1269) Saureus1269_01240(Saureus1269) Saureus71193_01635(Saureus71193) Saureus71193_01678(Saureus71193) Saureus71193_01681(Saureus71193) SaureusED133_01798(SaureusED133) SaureusED133_01840(SaureusED133) SaureusED133_01843(SaureusED133) SaureusED98_01777(SaureusED98) SaureusED98_01821(SaureusED98) SaureusED98_01824(SaureusED98) SaureusLGA251_01748(SaureusLGA251) SaureusLGA251_01790(SaureusLGA251) SaureusLGA251_01793(SaureusLGA251) SaureusN305_00013(SaureusN305) SaureusN305_00016(SaureusN305) SaureusN305_00059(SaureusN305) SaureusRF122_01807(SaureusRF122) SaureusRF122_01848(SaureusRF122) SaureusRF122_01851(SaureusRF122) SaureusST398_01884(SaureusST398) SaureusST398_01927(SaureusST398) SaureusST398_01930(SaureusST398) 
Saureus1001(35 genes,12 taxa): Saureus08BA02176_01441(Saureus08BA02176) Saureus1269_02301(Saureus1269) Saureus1269_02527(Saureus1269) Saureus71193_01310(Saureus71193) SaureusED98_01421(SaureusED98) SaureusED98_01424(SaureusED98) SaureusN305_02184(SaureusN305) SaureusN305_02188(SaureusN305) SaureusN305_02190(SaureusN305) SaureusRF122_01383(SaureusRF122) SaureusRF122_01386(SaureusRF122) SaureusST398_01476(SaureusST398) Saureus08BA02176_01442(Saureus08BA02176) Saureus08BA02176_01443(Saureus08BA02176) Saureus08BA02176_01445(Saureus08BA02176) Saureus1269_02302(Saureus1269) Saureus1269_02529(Saureus1269) Saureus1364_00430(Saureus1364) Saureus170_00571(Saureus170) Saureus170_00574(Saureus170) Saureus302_00352(Saureus302) Saureus302_00556(Saureus302) Saureus71193_01311(Saureus71193) Saureus71193_01312(Saureus71193) Saureus71193_01314(Saureus71193) SaureusED98_01423(SaureusED98) SaureusED98_01426(SaureusED98) SaureusLGA251_01423(SaureusLGA251) SaureusN305_02185(SaureusN305) SaureusN305_02187(SaureusN305) SaureusST398_01477(SaureusST398) SaureusST398_01478(SaureusST398) SaureusST398_01548(SaureusST398) SaureusED133_01465(SaureusED133) Saureus302_01433(Saureus302) 

Req.Output

Saureus1000 Saureus08BA02176_00020 

我使用此代碼找到,但沒有得到所需要的輸出單行

awk '{print $1} {for(i=1;i<=NF;i++){if($i~/^Saureus08BA/){print $i}}}' file > test 

輸出該命令

Saureus1000(37 
Saureus08BA02176_00020(Saureus08BA02176) 
Saureus08BA02176_01763(Saureus08BA02176) 
Saureus08BA02176_01805(Saureus08BA02176) 
Saureus08BA02176_01808(Saureus08BA02176) 
Saureus1001(35 
Saureus08BA02176_01441(Saureus08BA02176) 
Saureus08BA02176_01442(Saureus08BA02176) 
Saureus08BA02176_01443(Saureus08BA02176) 
Saureus08BA02176_01445(Saureus08BA02176) 
+1

'Saureus08BA'在兩個輸入線匹配,你怎麼能指望它僅用於第一線? – Inian

回答

0

GNU AWK溶液:

awk 'match($0,/^([^(]+)\([^(]+(Saureus08BA[0-9]+_[0-9]+)/,a){ print a[1],a[2] }' file 
  • ([^(]+) - 包含下一個「的第二捕獲組 - 從所述第一場

  • (Saureus08BA[0-9]+_[0-9]+)捕獲所需要的部分金黃色葡萄球菌「項目

輸出:

Saureus1000 Saureus08BA02176_00020 
Saureus1001 Saureus08BA02176_01441 
+0

謝謝羅馬..這對我的需求來說確實是一行代碼 –

+0

@ThulasiR,別客氣 – RomanPerekhrest

0

根據您的嘗試,您的問題並不清楚我正在考慮您需要查找一條線,其中包含字符串Saureus08BA02176並打印第一個字段值和Saureus08BA02176字符串值。

awk -F"[ (]" '/Saureus08BA02176/{print $1,$6}' Input_file 

編輯:按OP,然後將溶液以OP的條件現在也檢查第1場和一個字符串。

awk -F"[ (]" '/^Saureus1000/ && /Saureus08BA02176/{print $1,$6}' Input_file 
+0

是的,也許但簡單地說,我想提取起始字符串Saureus1000(第一列),然後是隻有Saureus08BA02176.謝謝 –

+0

@ ThulasiR:請檢查我的編輯解決方案,然後讓我知道。 – RavinderSingh13

+0

嗨,在每一行Saurues08BA2176不在第6列,它因行而異,所以我使用了我在代碼部分提到的命令 –

相關問題