Portál AbcLinuxu, 13. května 2024 07:36


Dotaz: AWK + skrypt + configurák + editácia viacerých riadkov

1.7.2007 16:15 tomolc | skóre: 29 | blog: Live Desktop Tuning | Bratislava
AWK + skrypt + configurák + editácia viacerých riadkov
Přečteno: 418×
Odpovědět | Admin
Zdravím

Mám skrypt ktorého súčastou je aj málá časť využívajúva AWK. Nakolko som desktopista tak som sa obrátil na kamoša aby mi pomohol a vyšlo z toho toto:

...

cat uni_xorg.conf | awk 'BEGIN{sum=0};{sum=sum+1; if(sum==155){ print " ",$1," ",$2} else {print $0 }}' > uni_xorg.conf.novy

...

Problém je, že to edituje len jeden riadok - 155. Ja by som potreboval aby sekcia { print " ",$1," ",$2} vykonala na riadkoch 5 97 155 158 a prípadne dalších podla potreby.

Niečo som si o awk prečítal ( http://www.ics.muni.cz/zpravodaj/articles/33.html ) avšak neviem to spraviť.

Ak som to dobre pochopil z toho článku o awk tak tento príkaz načíta každý riadok a ak je jeho poradové číslo zhodné z podmienkov zapíše editovaný riadok a ake nie tak zapíše ten pôvodný. Nieje to trochu neoptimálne takto prepisovať celý súbor? Nedalo by sa to ziednodušť povedzme tak aby priamo načítal požadované riadky a zapísal ich upravené?

ďakujem

tomolc
pocasienahorach.sk
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.7.2007 20:19 tomolc | skóre: 29 | blog: Live Desktop Tuning | Bratislava
Rozbalit Rozbalit vše Re: AWK + skrypt + configurák + editácia viacerých riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takže sa to podarilo vyriešiť:

cat uni_xorg.conf | awk 'BEGIN{sum=0};{ sum=sum+1; if ((sum==155)||(sum==52)) {print " ",$2," ",$3} else {print $0 }}' > uni_xorg.conf.novy

tomolc
pocasienahorach.sk
2.7.2007 10:16 mlz | skóre: 12 | blog: Obcas
Rozbalit Rozbalit vše Re: AWK + skrypt + configurák + editácia viacerých riadkov
... awk '(NR==x1) || (NR == x2) {...}' ...

Promena NR oznacuje cislo radku, za x1, x2 ... si dejte co potrebujete
2.7.2007 22:49 tomolc | skóre: 29 | blog: Live Desktop Tuning | Bratislava
Rozbalit Rozbalit vše Re: AWK + skrypt + configurák + editácia viacerých riadkov
Ďakujem

Toto vyzerá jednoduchšie ako to povodne riešenie - skusim to.

tomolc
pocasienahorach.sk
2.7.2007 13:54 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: AWK + skrypt + configurák + editácia viacerých riadkov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi bych to dělal takhle:
#!/usr/bin/env python
import sys

nahrady = {
    5: 'radek 5',
    10:'radek deset',
    15:'Toto je radek 15',
    21:'Toto je jednadvacaty radek'
}

radky = file('/etc/passwd').readlines()
for n in nahrady:
    radky[n-1] = nahrady[n] + '\n'
sys.stdout.writelines(radky)
Nevím, jestli se mám snažit šetřit procesor, disk nebo paměť, no prostě jsem načetl celý soubor naráz, zpracoval ho a zase vysypal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.