我有一个包含制表符分隔字段的文件,格式如下:
2-micron 251 1523 R0010W . + SGD gene . ID=R0010W;Name=R0010W;gene=FLP1;Alias=FLP1;Ontology_term=GO:0003690,GO:0003697,GO:0005575,GO:0008301,GO:0009009,GO:0042150;Note=Site-specific%20recombinase%20encoded%20on%20the%202-micron%20plasmid%2C%20required%20for%202-micron%20plasmid%20propagation%20as%20part%20of%20a%20plasmid%20amplification%20system%20that%20compensates%20for%20any%20copy%20number%20decreases%20caused%20by%20missegregation%20events;dbxref=SGD:S000029654;orf_classification=Verified 0
我需要提取 2 列(第四列和最后一列),我已经成功完成了。但我还需要从包含更多详细信息的列中提取特定信息。例如,我需要gene=foo
从第10列中提取。
所以,在结果中我想要第4列,第10列和最后一列的基因信息,总共3列。我怎么做 ?
答案1
这是 Perl 的方式:
$ perl -lane '$F[9]=~s/.*(gene=.+?;).*/$1/; print "$F[3]\t$F[9]\t$F[$#F]"' file
R0010W gene=FLP1; 0
启用-a
空白处的自动字段分割,将字段保存在数组中@F
。这适用于空格和制表符。向每个调用添加一个换行符,并应用-l
给定的脚本逐行读取输入文件。print()
-n
-e
该脚本将删除第 10 个字段中的所有内容(数组从 0 开始,因此第 10 个字段是$F[9]
),gene=
直到第 1 个字段除外;
。然后,打印第四个、最后一个以及第十个中剩下的内容。