从列中提取ID

时间:2017-03-09 17:09:53

标签: awk sed grep

我有一个像这样的文件

Anid|Mycfi2_180833_Genemark.11845_g     scer|maker-scaffold119_size133949-snap-gene-0.138-mRNA-2
Medi|Mycfi2_212664_estExt_fgenesh1_kg.C_120001  scer|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-6 
Scer|Mycfi2_212664_estExt_fgenesh1_kg.C_120001  Oryz|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-2
Usti|Mycfi2_212664_estExt_fgenesh1_kg.C_120001  Mfij|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-2
Usti|Mycfi2_212664_estExt_fgenesh1_kg.C_120001  Anid|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-2
Anid|Mycfi2_212664_estExt_fgenesh1_kg.C_120001  Medi|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-2

实际上同一个文件中还有其他几列。我需要grep其中的一些id,例如我想要任何以Anid,Usti,Medi,Oryz开头的东西,如果它们在第1列或第2列中并不重要。但我只想要ID而不是整行。< / p>

我试过

  awk '/^Anid| / {print $1}' data

确实给了我

  Anid|Mycfi2_180833_Genemark.11845_g
  Anid|Mycfi2_212664_estExt_fgenesh1_kg.C_120001

并从第二列中提取相同的内容我使用

  awk '/^Anid| / {print $2}' data

 Anid|maker-scaffold69_size108554-augustus-gene-0.130-mRNA-2

是否有一种有效的方法可以从单个文件中的第1列和第2列中的这4个单词开始获取所有ID?

1 个答案:

答案 0 :(得分:1)

使用self.func2()

egrep -o

egrep -o "\<(Anid|Usti|Medi|Oryz)\S*" 暗示它必须是单词的开头。请注意,如果您在同一行上有两个匹配,则会打印两行(但我会假设您想要的是这样)