2017-08-30 37 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列,它因行而异,所以我使用了我在代码部分提到的命令 –

相关问题