Как сделать вычитание двух файлов в perl?

Есть два файла, в первом куча ID, во втором только некоторые ID (использованные). Так вот нужно написать скрипт на perl, чтобы он из первого файла вычел ID второго файла. Файлики очень большие. Первый может быть до 20кк строк, поэтому скрипт должен быть оптимизирован. Помогите чем сможете =)
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
@pcdesign
Если я правильно понял вопрос.
Пусть у нас есть два файла 1.txt и 2.txt
cat 1.txt                                                                                                                                   
100
2323
2390238
32322323
9002


cat 2.txt 
34
4343
434
2390238
32322323
9002


С таким содержанием.
Теперь их можно сравнить и вычислить разницу таким образом:

#!/usr/bin/env perl 
use strict;
use warnings;
use utf8;
use File::Slurp;
use Array::Utils qw(:all);

my @arr1 = read_file( '1.txt', chomp => 1 );
my @arr2 = read_file( '2.txt', chomp => 1 );

# Получилось 2 массива. 
# Теперь сравниваем их c помощью use Array::Utils qw(:all);
# И вычисляем разницу
# Получаем элементы из массива @аrr1, которые не входят в массив @arr2


my @minus = array_minus( @arr1, @arr2 );

for my $i (@minus){
        print "$i \n";
}


Результат работы:
100 
2323


Теперь можно то что находится в массиве @minus записать в файл да и все.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
comm -23 file1 file2 , если раздумаете на перле писать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы