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