Regulární výrazy v AWK

isko

Regulární výrazy v AWK
« kdy: 06. 01. 2012, 12:02:59 »
Mám logovací soubor (zápisy ztrát packetů), ze kterého potřebuju vyfiltrovat řádky, kde jsou ztráty 1-100%. Používám na to AWK, ale nedaří se mi zachytit řádky, které mají 44%, 55%, 99%, 100% - zkrátka všude tam, kde se opakují číslice. Potřebuju:
1) poradit, proč se neodchytí tyhle hodnoty. Podotýkám, že program awk nezachytí ani hodnotu /100%/ či /99%/ natvrdo zadanou ve vzorku.
2) regulární výraz pro čísla 1-100%
Věděl by někdo, jak na to? 
« Poslední změna: 10. 01. 2012, 11:40:39 od Petr Krčmář »


smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #1 kdy: 06. 01. 2012, 13:10:16 »
A proc nehodis do placu stavajici kod ktery ti nefunguje at se muzeme podivat, kde nechat tesar diru?

isko

Re:regulární výrazy v awk
« Odpověď #2 kdy: 06. 01. 2012, 14:06:58 »
Tak už je to vyřešeno. Problém byl v tom, že řádky s údajem 100% mají jiný počet položek a díky nastaveným podmínkám mi to číslo vůbec nepřišlo do vstupu do awk. Teď už to mám upravené a na těch 1-100% mi funguje výraz [0-9][0-9][1-9]*%.

Díky za ochotu!

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #3 kdy: 06. 01. 2012, 14:59:54 »
A nestacilo by [0-9]*%?

Kit

Re:regulární výrazy v awk
« Odpověď #4 kdy: 06. 01. 2012, 15:05:15 »
Tak už je to vyřešeno. Problém byl v tom, že řádky s údajem 100% mají jiný počet položek a díky nastaveným podmínkám mi to číslo vůbec nepřišlo do vstupu do awk. Teď už to mám upravené a na těch 1-100% mi funguje výraz [0-9][0-9][1-9]*%.
Skutečně projde i údaj 100%? Podle uvedeného regulárního výrazu by neměl.


smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #5 kdy: 06. 01. 2012, 15:07:53 »
Mne to taky prijde divne. V te treti zavorce prece chybi 0. Prvni a treti zavorka by mely byt prohozeny ne? A navic tam podle mne projdou jenom trojciferna cisla ne?

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #6 kdy: 06. 01. 2012, 15:10:01 »
oprava: troj a vice ciferna cisla krome tech koncicich nulou :)
ale nejsem awk expert tak se klidne muzu plest.

Kit

Re:regulární výrazy v awk
« Odpověď #7 kdy: 06. 01. 2012, 15:36:34 »
Mne to taky prijde divne. V te treti zavorce prece chybi 0. Prvni a treti zavorka by mely byt prohozeny ne? A navic tam podle mne projdou jenom trojciferna cisla ne?

oprava: troj a vice ciferna cisla krome tech koncicich nulou :)
ale nejsem awk expert tak se klidne muzu plest.
Podle mne je to řádně domotáno. Ten regulární výraz funguje i pro 100%, protože ignoruje tu jedničku na začátku. Není tam znak '^' na začátku. Ale správně to není, i když to funguje. Je to docela hnusný hack.

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #8 kdy: 06. 01. 2012, 15:42:28 »
a neznamena ten zapis [0-9][0-9][1-9]*% ze tam budou prave tri ci vice cislic? To by pak odporovalo i te tve teorii jinak by prece melo stacit ^[0-9]*% ne?

Kit

Re:regulární výrazy v awk
« Odpověď #9 kdy: 06. 01. 2012, 15:48:56 »
a neznamena ten zapis [0-9][0-9][1-9]*% ze tam budou prave tri ci vice cislic? To by pak odporovalo i te tve teorii jinak by prece melo stacit ^[0-9]*% ne?
Jenže přes takový regexp by prošlo i '8%', '0%' nebo jen '%' a to nechtěl. Chtěl filtrovat hodnoty >=10%.

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #10 kdy: 06. 01. 2012, 15:54:13 »
Ja tam vidim: "2) regulární výraz pro čísla 1-100%". Nic o hodnotach vetsich jak deset tu nepadlo a nebo jsem slepej jak patrona. I kdyz je fakt ze pres tohle proleze i ta 0% ale to by slo resit nejakym NORem ne?


Kit

Re:regulární výrazy v awk
« Odpověď #11 kdy: 06. 01. 2012, 16:07:49 »
Ja tam vidim: "2) regulární výraz pro čísla 1-100%". Nic o hodnotach vetsich jak deset tu nepadlo a nebo jsem slepej jak patrona. I kdyz je fakt ze pres tohle proleze i ta 0% ale to by slo resit nejakym NORem ne?
Vidíš, mně ten jeho výraz funguje od 10% výše. Tak nějak jsem předpokládal, že to tak chtěl, aniž bych se podíval na původní dotaz.

smoofy

  • *****
  • 1 056
    • Zobrazit profil
    • E-mail
Re:regulární výrazy v awk
« Odpověď #12 kdy: 06. 01. 2012, 16:15:25 »
 ;D jo takhle. No podle meho selskeho rozumu by to nemelo fungovat ani na tech 10%, ale nemam to ted kde vyzkouset. Hlavne mne mate ta tazatelova poznamka, ze se mu nezobrazovali ty hodnoty kde se opakovaly cislice. Nechapu, jakej by to na to melo vliv pri tom zapisu, leda by tam sam nepridal nejakej vyraz za to zodpovednej.

David

Re:regulární výrazy v awk
« Odpověď #13 kdy: 07. 01. 2012, 02:14:05 »
a neznamena ten zapis [0-9][0-9][1-9]*% ze tam budou prave tri ci vice cislic? To by pak odporovalo i te tve teorii jinak by prece melo stacit ^[0-9]*% ne?
Ja tam teda vidim hvezdicku, ktera IMHO znamena "libovolny pocet". Takze tomuhle RE IMHO vyhovi retezec 2 a vice cislic, pricemz:
 - prvni a druha mohou byt 0 - 9
 - kazda dalsi muze byt 1 - 9
 - retezec nemusi temito cislicemi zacinat
 - retezec hned za cislicemi obsahuje znak "procento"
 - za procenterm muze retezec pokracovat.

David

Re:regulární výrazy v awk
« Odpověď #14 kdy: 07. 01. 2012, 02:17:46 »
a neznamena ten zapis [0-9][0-9][1-9]*% ze tam budou prave tri ci vice cislic? To by pak odporovalo i te tve teorii jinak by prece melo stacit ^[0-9]*% ne?
Jenže přes takový regexp by prošlo i '8%', '0%' nebo jen '%' a to nechtěl. Chtěl filtrovat hodnoty >=10%.
'8%', '0%' nebo jen '%' by IMHO pres tento RE urcitre neproslo, viz http://forum.root.cz/index.php?topic=3559.msg29765#msg29765