Предположим, у меня есть 2 файла, например:

Файл 1:

Verrucomicrobiaceae

Porphyromonadaceae
Clostridium
Verrucomicrobiaceae
Clostridium
Bacteroidaceae
Clostridium
Verrucomicrobiaceae
Verrucomicrobiaceae
Verrucomicrobiaceae
Verrucomicrobiaceae
Clostridium

Файл 2:

Verrucomicrobiaceae

Porphyromonadaceae

Verrucomicrobiaceae

Porphyromonadaceae

Verrucomicrobiaceae
Verrucomicrobiaceae
Verrucomicrobiaceae
Verrucomicrobiaceae

Я хотел бы посчитать, что произошло следующее:

  1. Количество случаев, когда строки в файле 1 и 2 совпадают
  2. Количество случаев, когда строки в файле 1 и 2 различаются
  3. Количество случаев, когда в строке в файле 1 есть строка, а в той же строке в файле 2 ничего нет (пусто)
  4. Количество случаев, когда в строке в файле 2 есть строка, а в той же строке в файле 1 ничего нет (пусто)

Я пытался использовать comm, cmp и diff, но они не смогли справиться с этой задачей. Есть ли какая-нибудь команда Linux, которая может это сделать?

0
Bioinfoguy 11 Фев 2013 в 23:04
Например, подойдет простой скрипт awk.
 – 
lynxlynxlynx
11 Фев 2013 в 23:10

1 ответ

Лучший ответ

Это достаточно специализировано, чтобы сделать это с помощью стандартных инструментов, вероятно, непросто. Я бы написал программу для сравнения, как в Perl:

#!/usr/bin/perl

open(IN1, "< file1");
open(IN2, "< file2");

$count1 = $count2 = $count3 = $count4 = 0;
while(<IN1>) {
   $line1 = $_;
   $line2 = <IN2>;
   $count1++ if($line1 eq $line2);
   $count2++ if($line1 ne $line2);
   $count3++ if($line1 ne "" && $line2 eq "");
   $count4++ if($line1 eq "" && $line2 ne "");
}
print "$count1 $count2 $count3 $count4\n";

Никакой проверки ошибок нет, предполагается, что оба файла имеют одинаковую длину, ...

0
vonbrand 11 Фев 2013 в 23:29
Здравствуйте, спасибо за помощь, код работает хорошо, за исключением того, что пустая строка соответствует "\ n", а не "".
 – 
Bioinfoguy
12 Фев 2013 в 18:21