Мой почтовый релей уже почти готов, и думаю, что завтра я наконец-то смогу запустить его и у меня будет чуть больше времени на другие проекты. А пока, скрипт для удаления одинаковых строк в файле:
#!/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 <имя обрабатываемого файла
random says:
Есть команда uniq. Таким макаром cat $file | sort |uniq >$newfile сделает то что надо гораздо быстрее
admin says:
Команда такая есть, и то что вы говорите, в принципе отлично работает, правда не так как это делает скрипт. Просто не всегда нужна сортировка, и вот в этом сучаи, ваш «макрос» не подойдет. Да есть много других способов, но мне в свое время был интересен именно перловый.
Да, и как пример, можно использовать вот такой макрос — cat -n $file|sort -k2,2 -u |sort -k1,1 -n|awk ‘ { $1=»»; gsub(«^ «,»»); print $0 } ‘ > $no_duplicates