在bash中打印第一次出现的行

时间:2013-04-15 00:14:44

标签: perl bash awk

我从最初的fasta文件中提取了ORFs,现在我想获得每个转录本的最长ORF。

用faSize提取ORF的大小并按大小排序后, 我以前使用的代码是:

perl -ane'print unless $x{$F[0]}++'

这次使用perl命令时遇到问题。

在提取大小并对成绩单进行分类后,我有类似的内容:

Singlet_1000_61         3844 
Singlet_2000_73         3508 
Singlet_1000_62         3081 
Singlet_2000_62         3008 
Singlet_3500_48         2973 
Singlet_4000_48        2964 
Singlet_3500_54        2863

我想要的是:

Singlet_1000_61         3844 
Singlet_2000_73         3508
Singlet_3500_48         2973
...

在这种情况下,perl命令不起作用。

您对我如何使其有效有任何建议吗?

还是awk命令?

2 个答案:

答案 0 :(得分:2)

如果只看

Singlet_1000_61 3844
        ^^^^

没问题,

 perl -F_ -ane'print unless $x{$F[1]}++'

如果你想看看

Singlet_1000_61 3844
^^^^^^^^^^^^

然后

perl -ane'$F[0] =~ s/_[^_]*\z//; print unless $x{$F[0]}++'

答案 1 :(得分:0)

打印每行首先将行的第二部分拆分为下划线。

awk -F_ '!s[$2]++' <<< 'Singlet_1000_61 3844
Singlet_2000_73 3508
Singlet_1000_62 3081
Singlet_2000_62 3008
Singlet_3500_48 2973
Singlet_4000_48 2964
Singlet_3500_54 2863
'
Singlet_1000_61 3844
Singlet_2000_73 3508
Singlet_3500_48 2973
Singlet_4000_48 2964