Я использовал "Perl для биологов с небольшими знаниями компьютерного кодирования" с сайта под названием Scriptome (Гарвард). Там даны отличные однострочные скрипты Perl для достижения желаемых функций, которые выполняются с помощью командной строки Unix. Один очень полезный скрипт, который я использую, называется: "Объединить две таблицы на основе столбцов с общим значением (merge_lines_based_on_shared_column)". Это работает отлично, но иногда мне нужно прямо противоположное. IE: создание таблиц, в которых заданные значения из двух столбцов не совпадают. Для первого случая я копирую/вставляю код, который приведен ниже. Я буду очень благодарен, если кто-нибудь сможет мне помочь.
$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
Этот сценарий довольно плохой, вы должны точно указать, где вы его нашли, чтобы его можно было исправить. В этом примере
$x = $line2{$F[$col1]};
Выполняется запись в глобальный необъявленный хэш с именем %line2
. Затем он позже проверяет, присутствует ли это значение здесь,
if ($x) {
Вероятно, вы захотите изменить этот блок на
if (!$x) {
print $F[$col1];
}