Есть файл1 - строки, есть файл2 - строки.
Нужно сформировать файл3 в котором будет файл1,
но будут отсутствовать строки из файла2. Т.е если в файле1
встречается строчка присутствующая в файле2, то ее удалить.
Помогите пожалуйста, как это сделать на перле или в баше.
Спасибо.
если файлы не сортированны, то можно так:#!/usr/bin/perl -w
use warnings;
use strict;open(FILE1, "<file1");
open(FILE2, "<file2");
open(FILE3, ">file3");my @f2 = <FILE2>;
my %reg;
foreach (@f2) {
$reg{$_} = 1;
}my @f1 = <FILE1>;
foreach (@f1) {
print FILE3 $_ unless exists $reg{$_};
}
>если файлы не сортированны, то можно так:
>
>#!/usr/bin/perl -w
>use warnings;
>use strict;
>
>open(FILE1, "<file1");
>open(FILE2, "<file2");
>open(FILE3, ">file3");
>
>my @f2 = <FILE2>;
>my %reg;
>foreach (@f2) {
> $reg{$_} = 1;
>}
>
>my @f1 = <FILE1>;
>foreach (@f1) {
> print FILE3 $_ unless exists $reg{$_};
>}Огромное спасибо,
а как можно подправить этот скрипт, чтобы искала не по полному совпадению,
а по частичному вхождению строки файла2 в файле1?
Заранее благодарен.
#!/usr/bin/perl# если я правильно понял вопрос, теперь нужны строки
# из файла2, к-рые частично входят в некую строку
# файла 1
#open(FILE1, "<file1");
open(FILE2, "<file2");
open(FILE3, ">file3");{
local $/;
$f1 = <FILE1>;
}
close FILE1;while (<FILE2>) {
print FILE3 $_ if index($f1, $_) > 0;
}
close FILE1;
close FILE3;