我有一个包含一些数据的文本文件。因为我不是一个优秀的程序员,所以我无法解决我的问题。文本文件类似于:
00000001 ggccgccggcggtatcatggcgacccggaacccccctccccaag 00000044
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44121210 ggccgccggcggtatcatggcgacccggaacccccctccccaag 44121167
00000045 actatgaaagtgatgatgactcttacgaagtgttggatttaactgagtat 00000094
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120443 actatgaaagtgatgatgactcttacgaagtgttggatttaactgagtat 44120394
00000095 gccagaagacaccactggtggaatcgagtgtttggccacagttccggacc 00000144
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120393 gccagaagacaccactggtggaatcgagtgtttggccacagttccggacc 44120344
00000145 tatggtagaaaaatactcagtggccacccagattgtaatgggtggagtga 00000194
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120343 tatggtagaaaaatactcagtggccacccagattgtaatgggtggagtga 44120294
00000195 gtggctg 00000201
<<<<<<<< ||||||| <<<<<<<<
44120293 gtggctg 44120287
00000202 gtgtgcaggatttttgttccagaaagttggaaaacttgcagcaactgcag 00000251
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44116963 gtgtgcaggatttttgttccagaaagttggaaaacttgcagcaactgcag 44116914
00000252 taggtggtggctttcttcttcttcag 00000277
<<<<<<<< |||||||||||||||||||||||||| <<<<<<<<
44116913 taggtggtggctttcttcttcttcag 44116888
00000278 atcgccagtcacagtggctatgtgcagatcgactggaagagagttgaaaa 00000327
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44113328 atcgccagtcacagtggctatgtgcagatcgactggaagagagttgaaaa 44113279
00000328 agatgtaaacaaagcaaaaagacagattaagaaacgagcaaataaggcag 00000377
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44113278 agatgtaaacaaagcaaaaagacagattaagaaacgagcaaataaggcag 44113229
00000378 cacctgaaatcaacaacataattgaagaa 00000406
<<<<<<<< ||||||||||||||||||||||||||||| <<<<<<<<
44113228 cacctgaaatcaacaacataattgaagaa 44113200
00000407 gcaacagaatttgtcaaacagaacattgtcatatccagtggatttgtggg 00000456
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44111361 gcaacagaatttgtcaaacagaacattgtcatatccagtggatttgtggg 44111312
00000457 aggctttttgctaggccttgcatcttaaggatatgaatgatctatcccag 00000506
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44111311 aggctttttgctaggccttgcatcttaaggatatgaatgatctatcccag 44111262
这是一个blat输出文件。
我想要的是将相应的值分配给较低的行值,如下所示:
00000001- 44121210
00000002- 44121211
00000003- 44121212
00000004- 44121213
-
-
-
00000506- 44111262.
答案 0 :(得分:0)
我会假设00000002
没有出现在示例输入中的原因是因为不完整,也是未排序的。
(我读过你写的内容:
序列本身就是数字.ooooooo1是g,g后面是00000002
但我很抱歉,我不明白这个解释)
所以,如果我理解它/猜对了,你想取这些线,取第一行的第一个数字(如00000001
)并加上第三行的第一个数字块(在该块中,它将是44121210
)。而且你想要对它们进行排序。
#!/usr/bin/perl -w
# sortdna.pl
my $string = join('', <>);
my @processed = map {
my @l = split /\n/;
$l[0] =~ s/\s.*$//;
$l[2] =~ s/\s.*$//;
$l[0] . "-" . $l[2]
} split(/\n\s*\n/, $string);
print join "\n", sort { $a cmp $b } @processed;
你可以像perl sortdna.pl < dna.txt
我使用您的示例输入获得的输出是:
00000001-44121210
00000045-44120443
00000095-44120393
00000145-44120343
00000195-44120293
00000202-44116963
00000252-44116913
00000278-44113328
00000328-44113278
00000378-44113228
00000407-44111361
00000457-44111311
......我知道我可能会离开 XD。请解释一下你需要什么,我会编辑它;)
答案 1 :(得分:0)
尝试:
#!/usr/bin/env perl
use strict;
use warnings;
# --------------------------------------
use English qw( -no_match_vars ); # Avoids regex performance penalty
# --------------------------------------
# saved data to be sorted
my %data = ();
# isolate the localization of $INPUT_RECORD_SEPARATOR
{
# paragraphs separated by a blank line
local $INPUT_RECORD_SEPARATOR = "\n\n";
# read a paragraph
while( my $paragraph = <DATA> ){
# break the paragraph into lines
my @lines = split /\n/, $paragraph;
# key is the first integer of the first line
my ( $key ) = $lines[0] =~ m{ \A (\d+) }msx;
# value is the first integer of the 3rd line
my ( $value ) = $lines[2] =~ m{ \A (\d+) }msx;
# save the data
$data{$key} = $value;
} # end while DATA
} # end isolation block
# output the data sorted by keys
for my $key ( sort { $a <=> $b } keys %data ){
print "$key- $data{$key}\n";
}
__DATA__
00000001 ggccgccggcggtatcatggcgacccggaacccccctccccaag 00000044
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44121210 ggccgccggcggtatcatggcgacccggaacccccctccccaag 44121167
00000045 actatgaaagtgatgatgactcttacgaagtgttggatttaactgagtat 00000094
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120443 actatgaaagtgatgatgactcttacgaagtgttggatttaactgagtat 44120394
00000095 gccagaagacaccactggtggaatcgagtgtttggccacagttccggacc 00000144
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120393 gccagaagacaccactggtggaatcgagtgtttggccacagttccggacc 44120344
00000145 tatggtagaaaaatactcagtggccacccagattgtaatgggtggagtga 00000194
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44120343 tatggtagaaaaatactcagtggccacccagattgtaatgggtggagtga 44120294
00000195 gtggctg 00000201
<<<<<<<< ||||||| <<<<<<<<
44120293 gtggctg 44120287
00000202 gtgtgcaggatttttgttccagaaagttggaaaacttgcagcaactgcag 00000251
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44116963 gtgtgcaggatttttgttccagaaagttggaaaacttgcagcaactgcag 44116914
00000252 taggtggtggctttcttcttcttcag 00000277
<<<<<<<< |||||||||||||||||||||||||| <<<<<<<<
44116913 taggtggtggctttcttcttcttcag 44116888
00000278 atcgccagtcacagtggctatgtgcagatcgactggaagagagttgaaaa 00000327
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44113328 atcgccagtcacagtggctatgtgcagatcgactggaagagagttgaaaa 44113279
00000328 agatgtaaacaaagcaaaaagacagattaagaaacgagcaaataaggcag 00000377
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44113278 agatgtaaacaaagcaaaaagacagattaagaaacgagcaaataaggcag 44113229
00000378 cacctgaaatcaacaacataattgaagaa 00000406
<<<<<<<< ||||||||||||||||||||||||||||| <<<<<<<<
44113228 cacctgaaatcaacaacataattgaagaa 44113200
00000407 gcaacagaatttgtcaaacagaacattgtcatatccagtggatttgtggg 00000456
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44111361 gcaacagaatttgtcaaacagaacattgtcatatccagtggatttgtggg 44111312
00000457 aggctttttgctaggccttgcatcttaaggatatgaatgatctatcccag 00000506
<<<<<<<< |||||||||||||||||||||||||||||||||||||||||||||||||| <<<<<<<<
44111311 aggctttttgctaggccttgcatcttaaggatatgaatgatctatcccag 44111262
答案 2 :(得分:0)
给出您的数据文件(名称input.blat
)和以下脚本:
unblat.pl
#!/usr/bin/env perl
use strict;
use warnings;
while (<>)
{
chomp;
next if m/^$/;
my $line1 = $_;
my $junk = <>;
my $line2 = <>;
next unless $junk =~ m/^[<]+ [|]+ [<]+$/;
$line1 =~ s/ .*//;
$line2 =~ s/ .*//;
printf "%.8d - %.8d\n", $line1, $line2;
}
$ perl unblat.pl input.blat
00000001 - 44121210
00000045 - 44120443
00000095 - 44120393
00000145 - 44120343
00000195 - 44120293
00000202 - 44116963
00000252 - 44116913
00000278 - 44113328
00000328 - 44113278
00000378 - 44113228
00000407 - 44111361
00000457 - 44111311
$
如果那不是您想要的,那么您必须从给定数据中显示您想要的内容,而不是让我们推测给定数据的正确输出是什么。