2013-02-11 2 views
0

Предположим, что у меня есть 2 файлов, например, что:сравнение 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

Простой 'awk' скрипт будет делать, например. – lynxlynxlynx

ответ

0

Это достаточно специализированный инструмент, который, вероятно, нелегко сделать с помощью стандартных инструментов. Я бы написать программу, делая сравнивающее, как в 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

Здравствуйте, Спасибо за помощь, код работает хорошо, за исключением того, что пустая строка соответствует «\ n», а не «». – Bioinfoguy

Смежные вопросы