URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3500
[ Назад ]

Исходное сообщение
"Очень нужна ваша помощь в скрипте"

Отправлено gexa , 21-Окт-04 17:38 
Есть файл1 - строки, есть файл2 - строки.
Нужно сформировать файл3 в котором будет файл1,
но будут отсутствовать строки из файла2. Т.е если в файле1
встречается строчка присутствующая в файле2, то ее удалить.
Помогите пожалуйста, как это сделать на перле или в баше.
Спасибо.

Содержание

Сообщения в этом обсуждении
"Очень нужна ваша помощь в скрипте"
Отправлено hatta , 21-Окт-04 18:25 
если файлы не сортированны, то можно так:

#!/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{$_};
}


"Очень нужна ваша помощь в скрипте"
Отправлено gexa , 22-Окт-04 09:19 
>если файлы не сортированны, то можно так:
>
>#!/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?
Заранее благодарен.


"Очень нужна ваша помощь в скрипте"
Отправлено mirya , 23-Окт-04 16:58 
#!/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;