从空格分隔文件中剪切特定列

时间:2012-11-23 06:32:24

标签: database unix sed cut

我使用FASTA文件运行hmmscan分析,要求使用--tblout选项的表格输出格式,这是故意以空格分隔(而不是制表符分隔)并对齐到对齐列。

文件看起来像这样(这只是一个格式示例)

targetname accession queryname    accession  e-value score bias
x_x_x      PFyyyy.y  ContigXXX_0  -          x.xe-xx yy.y  x.x
x          PFyyyy.yy COntigXXX_1  -          xe-x    yy.y  x.x
x_x        PFyyyy.y  COntigXXX_2  -          xe-xx    y.y  x.x
x_x_x      PFyyyy.yy COntigXXX_3  -          x.xe-x  yy.y  x.x
.
..

其中目标名称是例如:Methyltransf或Dimer_tnp_hAT或Nucleotide_trans

其中加入例如:PF13847.1或PF03407.11或PF01958.13;

其中查询名称为例如:Contig244_1或Contig44245_3或Contig12345_6

第二个入藏栏是: -

其中e.value例如:4.0e-10或3.5e-15等。

并且得分和偏差是这种格式的数字:xx.x

我想做的是切割queryname色谱柱,其中所有对蛋白质结构域具有显着命中的ContigXXX_X都是。

在此之后,我将能够对它们进行排序,并且只保留每个Contig的第一次出现,我可以将该文件与BlastP和BlastX的结果进行比较(我已经能够得到我的Contigs列表了点击nr数据库)

所以我的问题是:如何切割所有Contigs所在的列? 我一直尝试使用grep,sed,cut命令,但我还没找到合适的命令。

我是Unix语言的新手,我还在学习,所以每个建议都会非常感激。

如果我的问题不明确,请告诉我,我可以修改它!

2 个答案:

答案 0 :(得分:1)

表面上看,如果你有GNU cut,你可以使用:

cut -i -f 3 tblout-file

-i选项意味着将一个或空格作为字段分隔符(如果没有它,则每个空格都是字段分隔符)。非GNU版本的cut通常不支持-i。 (你可以通过运行cut检查它是否是GNU cut --version;如果你得到一个有意义的版本号,它(可能)是GNU,如果你得到无效的选项消息,它就不是。)< / p>

这不适合你吗?显然,您替换为tblout-file创建的文件的名称。

如果出现问题(例如没有GNU cut),请考虑使用awk

awk '{print $3}' tblout-file

这两个也包括输出中的第一行;有多种方法可以删除第一行。

cut -i -f 3 tblout-file | sed 1d
awk 'NR>1 { print $3 }' tblout-file

答案 1 :(得分:1)

awk 'NR!=1{print $3}' your_file

perl -F -lane 'if($.!=1){print $F[2]}' your_file