请不要评论说我已经问过这个,这是一个逻辑问题,我知道它主要是类似的代码,但有一些潜在的语法问题,我无法破译,花了几个小时调试这个没有希望,我真的需要这个答案。而其他帐户已被删除,所以我在半小时前发布了这个帖子,但无法查看。如果您想提供帮助,请仅发表评论。
它应该工作一切都在数据中,它应该是结果,我已经让它工作,所以它必须只是如此语法的东西,我没有注意到。我无法完成这项工作。我几乎可以肯定这是grep声明。
#!/usr/bin/perl
use warnings;
use strict;
open ("data", "<text.txt") or die "Can't open"; #
my @data = <data>; #file looking into
close "data"; #
while(<>){
chomp;
my $temp = $_;
my ($name, $number, $expression) = split("\t", $temp);
my $pattern = "\t";
my @found = grep ( /(^$name$pattern\|$pattern$number$)/, @data );
if(defined($found[0])){
print $_;
my ($what, $start, $stop, $chr, $who) = split("\t", $found[0]);
print "\t", $chr, $start, $stop;
@found = ();
}
}
print "\n";
输入格式为
A1B 1 68
A1C 299 0
A2B 547 0
A2L 877 30
A2M 2 7944
这是数据文件的格式
CLDN8 30214006 30216073 21 68
A1C 20808776 20811809 Y
UBE2Q2P5Y 25431156 25437315 Y
OR5M9 56462469 56463401 11 390162
我想搜索数据文件中输入文件的第一列或第二列中的项目实例,这些项目应分别与第一列和第五列(可能不存在)匹配
预期输出应为此示例
A1B 1 68 21 30214006 30216073
A1C 299 0 Y 20808776 20811809
但我什么都没得到
答案 0 :(得分:2)
我认为你正在寻找的是这个,但是真的很难说,因为你已经把你的问题描述得很糟糕了
我不得不做出很多假设,但至少输出符合你所说的预期
use strict;
use warnings 'all';
my $data_file = 'text.txt';
my @data;
{
open my $fh, '<', $data_file or die qq{Unable to open "$data_file" for input: $1};
while ( <$fh> ) {
next unless /\S/;
push @data, [ split ];
}
}
while ( <> ) {
next unless /\S/;
my ($name, $number, $expression) = split;
for my $item ( @data ) {
my ($what, $start, $stop, $chr, $who) = @$item;
if ( $what eq $name or defined $who and $who eq $expression ) {
print join("\t", $name, $number, $expression, $chr, $start, $stop), "\n";
}
}
}
A1B 1 68 21 30214006 30216073
A1C 299 0 Y 20808776 20811809