Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 按特定列中的数字排序_Perl_Unix_Sorting - Fatal编程技术网

Perl 按特定列中的数字排序

Perl 按特定列中的数字排序,perl,unix,sorting,Perl,Unix,Sorting,我有这种格式的数据(制表符分隔列) …我想按第9列中的前5个数字按升序排序。即,文件如下所示: Name_00001 Annotation_1 exon 193957 194252 . + . ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0 Name_00001 Annotation_1 exon 195500 197118 . + . ID=exon:TAXON_00022T0:2;Paren

我有这种格式的数据(制表符分隔列)

…我想按第9列中的前5个数字按升序排序。即,文件如下所示:

Name_00001  Annotation_1    exon    193957  194252  .   +   .   ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0
Name_00001  Annotation_1    exon    195500  197118  .   +   .   ID=exon:TAXON_00022T0:2;Parent=TAXON_00022T0    
Name_00001  Annotation_1    gene    329412  330509  .   -   .   ID=TAXON_00029;Name=TAXON_00029
Name_00001  Annotation_1    mRNA    329412  330509  .   -   .   ID=TAXON_00029T0;Parent=TAXON_00029

我尝试过使用Unix或Perl,但我的技能非常有限……

不需要Perl。在Unix中使用sort命令

sort -k 9 -n your_file
测试如下:

> cat temp
Name_00001      Annotation_1    gene    329412  330509  .       -       .       ID=TAXON_00029;Name=TAXON_00029
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00029T0;Parent=TAXON_00029
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    exon    195500  197118  .       +       .       ID=exon:TAXON_00022T0:2;Parent=TAXON_00022T0
> sort -k 9 -n temp
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    exon    195500  197118  .       +       .       ID=exon:TAXON_00022T0:2;Parent=TAXON_00022T0
Name_00001      Annotation_1    gene    329412  330509  .       -       .       ID=TAXON_00029;Name=TAXON_00029
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00029T0;Parent=TAXON_00029
对评论也进行了测试:

> cat temp
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00013T0;Parent=TAXON_00029
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00002T0:1;Parent=TAXON_00022T0
> sort -k 9 -n temp
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00002T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00013T0;Parent=TAXON_00029

不需要perl。在unix中使用sort命令

sort -k 9 -n your_file
测试如下:

> cat temp
Name_00001      Annotation_1    gene    329412  330509  .       -       .       ID=TAXON_00029;Name=TAXON_00029
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00029T0;Parent=TAXON_00029
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    exon    195500  197118  .       +       .       ID=exon:TAXON_00022T0:2;Parent=TAXON_00022T0
> sort -k 9 -n temp
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00022T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    exon    195500  197118  .       +       .       ID=exon:TAXON_00022T0:2;Parent=TAXON_00022T0
Name_00001      Annotation_1    gene    329412  330509  .       -       .       ID=TAXON_00029;Name=TAXON_00029
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00029T0;Parent=TAXON_00029
对评论也进行了测试:

> cat temp
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00013T0;Parent=TAXON_00029
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00002T0:1;Parent=TAXON_00022T0
> sort -k 9 -n temp
Name_00001      Annotation_1    exon    193957  194252  .       +       .       ID=exon:TAXON_00002T0:1;Parent=TAXON_00022T0
Name_00001      Annotation_1    mRNA    329412  330509  .       -       .       ID=TAXON_00013T0;Parent=TAXON_00029

如果确实要按第9列中的前5位进行排序, 这是您无法向
sort
解释的,但正如您所建议的,
perl
更灵活:

perl -e 'sub key { 0+((split(/\s+/,$_[0]))[8] =~ /(\d{5})/)[0] }; print sort { key($a) <=> key($b) } <>' < unsorted > sorted

如果确实要按第9列中的前5位进行排序, 这是您无法向
sort
解释的,但正如您所建议的,
perl
更灵活:

perl -e 'sub key { 0+((split(/\s+/,$_[0]))[8] =~ /(\d{5})/)[0] }; print sort { key($a) <=> key($b) } <>' < unsorted > sorted

这是正确的吗?我试了另一个文件。此命令将此“ID=TAXON\U 00013T0”放在第9列的“ID=TAXON\U 00002T0”之前。第二个数字比第一个小,你确定吗?我用同样的数字试过了,它的打印正确吗?我试了另一个文件。此命令将此“ID=TAXON\U 00013T0”放在第9列的“ID=TAXON\U 00002T0”之前。第二个数字比第一个小,你确定吗?我用同样的数字试过了,它的打印正确了。我是否误解了这里的某些内容?我得到了这个错误消息:由于编译错误,“/(\d{5})/}”附近的-e第1行出现语法错误。我使用了这个命令:
perl-e'sub-key{((split(/\s+/,$[0])[8]=~/(\d{5})/};print sort{key($a)key($b)}'sort test out.txt
对不起,我粘贴了错误的版本:(这一个应该更好。我还添加了一个扩展版本。我在这里误解了什么吗?我得到了这个错误消息:语法错误在-e行1,靠近“/(\d{5})/}”执行-e由于编译错误而中止。我使用了这个命令:
perl-e'sub-key{(split(/\s+/,$[0])[8]=~/(\d{5})/};打印排序{key($a)key($b)}“sort test out.txt
对不起,我粘贴了错误的版本:(这个应该更好。我还添加了一个扩展版本。