Azonos sorok törlése nem rendezett szöveges fáljban

Milyen megoldást lehetne kiatálni, a következő problémára:

Van egy kb. 100 ezer soros text file:

1:
alma
körte
barack

2:
szilva
narancs
narancs

3:
banán
egres
egres
egres

...
...

Azokat a sorokat szeretném kicserélni, ahol több van belőlük, és azt szeretném, hogy csak 1 maradjon.
Fontos a szöveget nem rendezhetem, a sorrendnek maradnia kell.
alap esetben minden szó csak egyszer fordulhat elő, kivéve az említett esetekben.

Hozzászólások

Az ismétlések csak egymás után lehetnek, vagy elszórva is?

PL. lehet ilyen:

körte
alma
banán
körte

?

Ha igen, akkor melyik helyen akarod bent hagyni a körtét? Az első előfordulási helyen? Vagy?

Csaba

egyszóval redukált sorozatot kell előállítanod? nem hangzik bonyolult feladatnak...

n = a sorok száma
ciklus i = 2-től n-ig { ha i. sor és i-1. sor azonos, akkor i. sort törlöd }

a törlést sokféleképpen meg tudod csinálni, például az új fájlba rögtön írhatod a feltételnek eleget nem tevő [nem törlendő] sorokat, vagy csak az indexeiket tárolod külön tömbbe, és a végén írod vissza fájlba [vagy ahova kell]

ez kellett?

:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog

Ha az ismétlődések egymás után vannak biztosan, nem elszórva, akkor szerintem a ,,uniq'' parancsnak nézz utána.

G.
============================================
"Share what you know. Learn what you don't."

Ha nem ertettem felre a feladatot, akkor itt egy awk:
Kicsit attordelte, de azert hasznalhato.

Udv:
Istvan


#!/usr/bin/awk -f

{
/* Blokk eleje tartalmaz ":" -ot */
if( index($0,":") != 0 ) {
print $0
getline
i=1;
/* Blokk vegeig olvas, uressorig*/
while ( NF > 0 )
{
gyumolcs=$1
mar_van=0
for(j=1;j < i;j++)
{
if( gyumi[j] == gyumolcs ){
mar_van=1
}
}
if( ! mar_van ){
printf "%s \n",gyumolcs
gyumi[i]=gyumolcs

}
getline
i++
}
/* Blokk vegere ujsor */
print
}
}

# remove duplicate, consecutive lines (emulates "uniq")
awk 'a !~ $0; {a=$0}'

# remove duplicate, nonconsecutive lines
awk '! a[$0]++' # most concise script
awk '!($0 in a) {a[$0];print}' # most efficient script

t

ui: http://lmgtfy.com/?q=awk+duplicate+lines