1

我使用 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 等。

score 和 bias 是这种格式的数字:xx.x

我想做的是剪切所有对蛋白质结构域有重大影响的 ContigXXX_X 所在的查询名称列。

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

所以我的问题是:我怎样才能剪掉我所有的 Contig 所在的列?我一直在尝试使用 grep、sed、cut 命令,但我还没有找到合适的命令。

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

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

4

2 回答 2

1

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

cut -i -f 3 tblout-file

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

这对你不起作用吗?显然,您将替换为您创建的文件的名称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
于 2012-11-26T05:57:08.777 回答
1
awk 'NR!=1{print $3}' your_file

或者

perl -F -lane 'if($.!=1){print $F[2]}' your_file
于 2012-11-26T06:01:18.807 回答