我一直在使用 Scriptome(哈佛大学)网站上的“Perl for Biologies with Little Computercoding Knowledge”。它提供了出色的 Perl 语句来实现在 Unix 行命令上运行的所需功能。我使用的一个非常有用的脚本的标题是:“根据共享值的列连接两个表(merge_lines_based_on_shared_column)”这非常有效,但有时我想要完全相反的效果。 IE:生成两列给定值不匹配的表。对于前者,我复制/粘贴他们在下面提供的代码。如果有人能帮助我,我将不胜感激。
myScirpt.pl
$col1=1;
$col2=0;
($f1,$f2)=@ARGV;
open(F2,$f2);
while (<F2>) {
s/\r?\n//;
@F=split /\t/, $_;
$line2{$F[$col2]} .= "$_\n"
};
$count2 = $.;
open(F1,$f1);
while (<F1>) {
s/\r?\n//;
@F=split /\t/, $_;
$x = $line2{$F[$col1]};
if ($x) {
$num_changes = ($x =~ s/^/$_\t/gm);
print $x;
$merged += $num_changes
}
} warn "\nJoining $f1 column $col1 with $f2 column $col2\n"
. "$f1: $. lines\n"
. "$f2: $count2 lines\n"
. "Merged file: $merged lines\n";
然后我运行它就像
myScript.pl Input-file1.txt Input-file2.txt > Merge-file.txt
答案1
该脚本非常糟糕,您应该准确指定找到它的位置,以便可以对其进行修复。在这个例子中
$x = $line2{$F[$col1]};
正在写入名为 的全局未声明哈希%line2
。然后它稍后检查该值是否存在于此处,
if ($x) {
您可能想将该块更改为
if (!$x) {
print $F[$col1];
}