Perl скрипт — удаление одинаковых строк в файле

Мой почтовый релей уже почти готов, и думаю, что завтра я наконец-то смогу запустить его и у меня будет чуть больше времени на другие проекты. А пока, скрипт для удаления одинаковых строк в файле:

#!/usr/bin/perl -w
use strict;
my $origfile = shift;
my $outfile = "no_dupes_" . $origfile;
my %hTmp;
open (IN, "<$origfile") or die "Couldn't open input file: $!";
open (OUT, ">$outfile") or die "Couldn't open output file: $!";
while (my $sLine = <IN>) {
next if $sLine =~ m/^\s*$/; #remove empty lines
#Without the above, still destroys empty lines except for the first one.
print OUT $sLine unless ($hTmp{$sLine}++);
}
close OUT;
close IN;

Если сохранить данный скрипт в файле script.pl, то запускаем мы его:

perl script.pl <имя обрабатываемого файла

Случайные Статьи

Loading…


Количество просмотров :4095

2 Comments

  1. random:

    Есть команда uniq. Таким макаром cat $file | sort |uniq >$newfile сделает то что надо гораздо быстрее

    • admin:

      Команда такая есть, и то что вы говорите, в принципе отлично работает, правда не так как это делает скрипт. Просто не всегда нужна сортировка, и вот в этом сучаи, ваш «макрос» не подойдет. Да есть много других способов, но мне в свое время был интересен именно перловый.
      Да, и как пример, можно использовать вот такой макрос — cat -n $file|sort -k2,2 -u |sort -k1,1 -n|awk ‘ { $1=»»; gsub(«^ «,»»); print $0 } ‘ > $no_duplicates

Оставьте коментарий