Com o GNU awk
(4.1.0 ou superior para o recurso inplace
):
gawk -i inplace '
NR >= 10 && NR <= 20 {
if ($0 in seen) next
seen[$0]
}
{print}' ./file
Ou com perl
:
perl -ni -e 'print if $. < 10 or $. > 20 or !$seen{$_}++' ./file
Para processar vários arquivos:
gawk -i inplace '
BEGINFILE{delete seen}
FNR >= 10 && FNR <= 20 {
if ($0 in seen) next
seen[$0]
}
{print}' ./*.txt
Ou com perl
:
perl -ni -e '
print if $. < 10 or $. > 20 or !$seen{$_}++;
if (eof) {close ARGV; undef %seen}' ./*.txt