Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru [vyřešeno]  (Přečteno 7515 krát)

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
    • Zobrazit profil
potreboval bych radu, proc mi v prvnim pripade vynechava prvni radek, ostatni zpracuje ok
1)
while read line; do
 awk '{print $1,$2}'
done < nejakysoubor

druhy pripad udela, co ma, ale je oproti prvnimu mnohem pomalejsi
2)
while read line; do
echo "$line" | awk '{print $1,$2}'
done < nejakysoubor

Popr. byla by nejaka vice optimalizovana moznost ...

jedna se pouze o modelovy pripad oprosteny od dalsich kroku krome awk, radky jsou dale zpracovavany podle obsahu.
« Poslední změna: 29 Července 2008, 19:20:30 od Tomáš Pikálek »

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #1 kdy: 26 Července 2008, 12:42:46 »
protoze prvni radek ti sezere ten read line, dalsi radky basti ze stdin awk sam.. a az je konec vstupu, tak skonci i ten cyklus, jelikoz read line nema co nacist.

prakticky staci jen
Kód: [Vybrat]
awk '{print $1,$2}'  nejakysoubor
« Poslední změna: 27 Července 2008, 08:08:45 od kkaarreell »

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #2 kdy: 26 Července 2008, 21:41:13 »
protoze prvni radek ti sezere ten readline, dalsi radky basti ze stdin awk sam.. a az je konec vstupu, tak skonci i ten cyklus, jelikoz readline nema co nacist.

prakticky staci jen
Kód: [Vybrat]
awk '{print $1,$2}'  nejakysoubor

to ja preci vim, dotaz byl na smycku, psal jsem, ze kazdy radek dale zpracovavam a porovnavam s jinym souborem, v prikladu je pouze uvedeno awk kvuli jednoduchosti , protoze to staci, jasne ze si prvni dva sloupce ze souboru muzu zobrazit i jednoduseji ...

proc mi prvni radek sezere readline ?

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #3 kdy: 27 Července 2008, 08:18:12 »
no protoze od toho prikaz read je. :)  konstrukce "read line" nacte radek ze vstupu a ulozi ho do promenne "line". Pokud tedy chces s tim radkem pracovat, tak musis vyuzit te promenne (tak, jak jsi to uvedl v tom druhem priklade). V tebou uvedenem pripade to tedy vypada takto:
1. zpracuje se podminka cyklu (prvni iterace). prikaz read nacte prvni radek ze vstupu (souboru) a ulozi jej do promenne
2. vstoupim do cyklu, ve kterem prikaz awk cte radky ze vstupu (kde zbyvaji radky 2, 3, ...) a zpracuje je
3. telo cyklu skonci a zacina dalsi (druha) iterace. prikaz read jiz nemuze nacist dalsi radek ze vstupu (jelikoz vse jiz sezral awk) a proto cyklus while konci.

takze abych to shrnul, cely cyklus probehne pouze jednou!!!, pricemz prvni radek vstupu zpracuje prikaz read, zbyvajici radky prebere awk.
« Poslední změna: 27 Července 2008, 08:22:21 od kkaarreell »

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #4 kdy: 27 Července 2008, 22:25:33 »
diky za vysvetleni. rozdil je tedy, ze v prvnim pripade nevyuzivam promenne line, ulozene vzdy s novym radkem do pameti, ale rovnou to bere awk z vystupu prikazu read a ten prvni radek se udeje jeste pred vstupem do smycky - rozumim-li tomu dobre. Jeste se nad tim popremyslim, dik :)

Je tam veliky skok v performance mezi obema pripady

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #5 kdy: 27 Července 2008, 23:27:27 »
diky za vysvetleni. rozdil je tedy, ze v prvnim pripade nevyuzivam promenne line, ulozene vzdy s novym radkem do pameti, ale rovnou to bere awk z vystupu prikazu read a ten prvni radek se udeje jeste pred vstupem do smycky - rozumim-li tomu dobre. Jeste se nad tim popremyslim, dik :)
neni to presne..  jeste jednou a naposled. :) Na vstupu je obsah souboru. Prikaz read nacte jeden radek a ulozi jej do promenne. Nasledne je spusten prikaz awk. jelikoz mu neni zadan zadny soubor, cte data ze vstupu (obsah souboru), ale az od druheho radku, jelikoz prvni radek byl ze vstupu nacten prikazem read (a tedy uz na vstupu neni). Zadny vystup prikazu read se nekona, vyznam ma pouze navratovy kod prikazu read, to kvuli podmince cyklu while.
Citace
Je tam veliky skok v performance mezi obema pripady
to je samozrejme, jelikoz v prvnim pripade je awk spusten jen jednou, zatimco v druhem je awk spousten opakovane, pro kazdy jednotlivy radek.

tomaskCZ

  • Člen
  • **
  • Příspěvků: 373
    • Zobrazit profil
Re: bash: jednoducha smycka na cteni a zpracovani radku v text. souboru
« Odpověď #6 kdy: 29 Července 2008, 18:16:51 »
 dik !

 


Provoz zaštiťuje spolek OpenAlt.