私はScriptome(Harvard University)のウェブサイトで「コンピュータコーディングの知識がほとんどない生物学のためのPerl」を使ってきました。これはUnixラインコマンドで実行するために必要な機能を実装する優れたPerlステートメントを提供します。私が使用する非常に便利なスクリプトのタイトルは、「共有値列に基づいて2つのテーブルを結合する(merge_lines_based_on_shared_column)」です。これは非常にうまく機能しますが、時には正反対の効果が必要な場合があります。 IE:指定された値が一致しない2つの列を持つテーブルを作成します。前者の場合、以下に提供されたコードをコピーして貼り付けました。誰でも私を助けることができればとても感謝します。
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];
}