jak rozsekat strukturovany soubor do nekolika malych
Jirka Kosina
jikos na jikos.cz
Čtvrtek Leden 17 15:52:53 CET 2002
On Thu, 17 Jan 2002, Lukas Kopriva wrote:
> A nejakytext
> B jinytext
> BB jestejinytext
> A uplnejinytext
> Chtel bych jej co nejjednoduseji rozsekat do nekolika malych souboru
> obsahujicich skupiny dat v zavislosti na hodnote prvniho sloupce. Vysledkem by
> tedy byly tri soubory. Prvni 'A' by obsahoval dva radky - 'nejakytext' a
> 'uplnejinytext'. Dalsi dva soubory 'B' a 'BB' by obsahovaly kazdy po jednom
> radku analogicky.
> Chtel bych to provest co nejjednodusejsi skupinou programu, jako je awk apod.,
> pripadne sdruzenou v nejakem shellovem skriptu. Resenim v Perlu nebo Pythonu
> bych se rad vyhl. Jedna se o soubor s priblizne 15 miliony udaju, takze
> rychlost zpracovani taky hraje roli.
> Napada nekoho nejake 'elegantni' reseni?
Po setrideni toho souboru (podle prvniho sloupce, ale to je asi jedno,
pokud se to skutecne ma stepit podle prvniho sloupce, mate stesti, a
setridi se vam to tak jako tak i podle cele radky ;) ) uz bych rekl ze je
to skutecne velice jednoduche:
PREVIOUS=NECO_CO_V_TOM_SOUBORU_NENI
cat soubor | while read A B; do
if [ "$PREVIOUS" != "$A" ]; do
: > part.$A
PREVIOUS=$A
fi
echo $A $B >> part.$A
done
nebo neco na ten zpusob. (to vytavreni toho prazdneho souboru samozrejme
neni treba, to >> by ho vytvorilo taky ;) ).
Ale vsadil bych na to, ze pokud to napisete v cecku, bude to samozrejme
rychlejsi ;)
--
JiKos.
Další informace o konferenci Linux