【问题标题】:Cutting a specific column from a space delimited file从空格分隔的文件中剪切特定列
【发布时间】:2012-11-11 12:39:12
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: database unix sed cut


    【解决方案1】:

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

    cut -i -f 3 tblout-file
    

    -i 选项意味着一个或一个空格将作为字段分隔符(而没有它,每个空格都是一个字段分隔符)。 cut 的非 GNU 版本通常不支持 -i。 (您可以通过运行 cut --version 来检查它是否是 GNU cut;如果您获得有意义的版本号,则它(可能)是 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
    

    【讨论】:

      【解决方案2】:
      awk 'NR!=1{print $3}' your_file
      

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

      【讨论】:

      • 谢谢!awk 命令运行良好。我想出了如何获得 Contigs 列,但这要快得多!谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2011-05-21
      • 1970-01-01
      • 2022-01-11
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多