/ / Rozdeliť vstup do viacerých výstupov na základe obsahu? - bash, unix, shell, text

Rozdeliť vstup do viacerých výstupov založených na obsahu? - bash, unix, shell, text

Predpokladajme, že existuje súbor, ktorý vyzerá takto:

xxxx aa whatever
yyyy bb whatever
zzzz aa whatever

Rád by som ich rozdelil na 2 súbory, ktoré obsahujú:

najprv:

xxxx aa whatever
zzzz aa whatever

druhá:

yyyy bb whatever

Tj. Chcem zoskupiť riadky podľa určitej hodnoty v riadkoch (pravidlo môže byť: 2. slovo oddelené medzerami), ale nepreusporiadajte riadky v rámci skupín.

Samozrejme, že na to môžem napísať program, ale zaujímalo by ma, či existuje nejaký pripravený nástroj, ktorý dokáže niečo také?

Ospravedlňujeme sa, nespomenul som to, ako som predpokladalcelkom zrejmé - množstvo rôznych „slov“ je obrovské. hovoríme o nich najmenej 10 000. Tj. žiadne riešenie založené na vymenovaní slov pred rukou nebude fungovať.

A tiež - rád by som nemal rád rozdelenie na viac priechodov - príslušné súbory sú zvyčajne dosť veľké.

odpovede:

6 pre odpoveď č. 1

Takto sa vytvoria súbory s názvom output.aa, output.bb, atď.:

awk "{print >> "output." $2}" input.file

1 pre odpoveď č. 2

Mohli by ste urobiť grep, aby ste dostali čiary, ktoré sa zhodujú, a grep-v, aby ste získali čiary, ktoré sa nezhodujú.

Hm, mohol by si to urobiť sort -f" " -s -k 2,2, ale to je O (n log n).