Fórum Root.cz

Hlavní témata => Software => Téma založeno: veskotskujehnusne kdy 02. 01. 2020, 15:47:16

Název: Boj s grepem
Přispěvatel: veskotskujehnusne kdy 02. 01. 2020, 15:47:16
Ahoj, asi jsem si zvolil špatnou utilitu, ale když už to mám rozdělané, dodělal bych to v grepu.

Mám dlouhý seznam vygrepnutých výsledků, ale jde mi o to, že tam mám například pomocí -A více řádků pro záznam. Potřeboval bych to proparsovat dále jak potřebuji, někam přidat data, sloučit výsledky a podobně.

Pokud bych použil grep whole read line, zase se mi to rozpadne na víc řádků i pro jeden výsledek. Dá se nějak vstoupit do toho cyklu, kterým grep prochází a po každém matchnutí provést vlastní kód?

Děkuji.
Název: Re:Boj s grepem
Přispěvatel: RDa kdy 02. 01. 2020, 16:07:16
Po matchnuti provest kod... bude umet spis SED nez GREP.
Název: Re:Boj s grepem
Přispěvatel: Logik kdy 02. 01. 2020, 16:12:43
Jestli to, co leze z grepu je použitelné, tak to propajpuj dál do SEDu či ještě spíš AWKu (komplexnější věci se dělaj líp v něm).Grep na to použít imho nejde a pro tydle linuxové utility je normální jich pár "propajpovat".

Ale jestli je to složitější práce s textem, možná bude pro Tebe ve výsledku nejjednodušší to postprocessnout v pythonu či perlu.

Název: Re:Boj s grepem
Přispěvatel: Kit kdy 02. 01. 2020, 16:44:52
Tady bych byl pro přesedlání na AWK, které to může zvládnout vše naráz i s tím původním grepováním. Pro analýzu logů se mi osvědčilo lépe než grep.
Název: Re:Boj s grepem
Přispěvatel: hawran diskuse kdy 02. 01. 2020, 16:46:47
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup -  třeba v tom pythonu)
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 02. 01. 2020, 16:55:09
nastav jako oddělovač konce řádku '--' (jedno v čem), potom můžeš zpracovávat výstupy grep -A najednou
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 02. 01. 2020, 18:17:33
Citace od: hawran diskuse kdy 02. 01. 2020, 16:46:47
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup -  třeba v tom pythonu)

U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.
Název: Re:Boj s grepem
Přispěvatel: Standa Blábol kdy 02. 01. 2020, 18:28:56
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.

Priklad z webu:

use strict;
use warnings;

die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
    open my $fh, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$fh>) {
        if ($line =~ /REGEX/) {
            print $line;
        }
    }
}

Název: Re:Boj s grepem
Přispěvatel: Kit kdy 02. 01. 2020, 18:47:43
Citace od: gilll kdy 02. 01. 2020, 18:17:33
Citace od: hawran diskuse kdy 02. 01. 2020, 16:46:47
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup -  třeba v tom pythonu)
U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.

Vůbec netušíme, jakou úlohu vlastně řeší, takže tohle stanovisko je předčasné. Jistě, AWK narazí třeba i při zpracování CSV a podobných špeků, ale proč ho hned zavrhovat? Používám ho často a rád.
Název: Re:Boj s grepem
Přispěvatel: Kit kdy 02. 01. 2020, 18:51:26
Citace od: Standa Blábol kdy 02. 01. 2020, 18:28:56
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.

Priklad z webu:

use strict;
use warnings;

die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
    open my $fh, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$fh>) {
        if ($line =~ /REGEX/) {
            print $line;
        }
    }
}


Proč tak složitě? Perl to umí i mnohem elegantněji, tohle je spíš úloha pro oneliner.
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 02. 01. 2020, 19:25:14
Citace od: Standa Blábol kdy 02. 01. 2020, 18:28:56
Na praci s textem doporucuju PERL, byl pro tyto ucely vyvinut.

Priklad z webu:

use strict;
use warnings;

die "Usage: $0 FILENAMEs\n" if not @ARGV;
foreach my $file (@ARGV) {
    open my $fh, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$fh>) {
        if ($line =~ /REGEX/) {
            print $line;
        }
    }
}


ten kód souvisí s otázkou jak?

jak píše Kit, výstup grep -A jde zpracovat onelinerem

grep -A 5 neco | perl -lne 'BEGIN {$/ = "--\n"} @lines = split /\n/; '

Název: Re:Boj s grepem
Přispěvatel: gilll kdy 02. 01. 2020, 20:29:35
splitování lze zařídit i parametrem -F

grep -A 5 neco | perl -F'\n' -lne 'BEGIN {$/ = "--\n"} print $F[0]'
Název: Re:Boj s grepem
Přispěvatel: hawran diskuse kdy 03. 01. 2020, 09:56:30
Citace od: gilll kdy 02. 01. 2020, 18:17:33
Citace od: hawran diskuse kdy 02. 01. 2020, 16:46:47
Taky bych to viděl na ten awk, ten je na to stavěný.
(pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup -  třeba v tom pythonu)

U všeho s vyjímkou nejtriviálnějších úloh s awk narazí.
Hmmm, tak to je úžasný závěr.
Název: Re:Boj s grepem
Přispěvatel: novotnyr kdy 03. 01. 2020, 10:35:00
Grep s akciou pre každý nájdený riadok je awk.

Napríklad ,,Nájdi riadky začínajúce na "root" a vypíš ich so štyroma nasledovnými riadkami", resp. emulácia GNU grep -A:


awk '/^root/ { for(i=0; i<5; i++) { print; getline; }}' /etc/passwd


Napríklad ,,Skupiny z grep -A oddelené dvoma pomlčkami dajte na jeden riadok"

Citacegrep -A1 root /etc/passwd | awk '/^--/ { print BUF; BUF=""; next } { BUF = BUF $0 } END { print BUF }'

Resp. plný skript v awk:

Citace
/^--/ {
  print BUF
  BUF=""
  next
}
{
  BUF = BUF $0
}
END {
  print BUF
}
- Druhé pravidlo nalepí každý riadok do buffera BUF.
- Prvé pravidlo vraví, že ak na začiatku riadku sú dve pomlčky --, vyprintuje obsah buffera a vymaže buffer.
- Tretie pravidlo vyprintuje obsah buffera na konci súboru.
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 03. 01. 2020, 11:14:20
Citace od: novotnyr kdy 03. 01. 2020, 10:35:00
Grep s akciou pre každý nájdený riadok je awk.

Napríklad ,,Nájdi riadky začínajúce na "root" a vypíš ich so štyroma nasledovnými riadkami", resp. emulácia GNU grep -A:


awk '/^root/ { for(i=0; i<5; i++) { print; getline; }}' /etc/passwd


Napríklad ,,Skupiny z grep -A oddelené dvoma pomlčkami dajte na jeden riadok"

Citacegrep -A1 root /etc/passwd | awk '/^--/ { print BUF; BUF=""; next } { BUF = BUF $0 } END { print BUF }'

Resp. plný skript v awk:

Citace
/^--/ {
  print BUF
  BUF=""
  next
}
{
  BUF = BUF $0
}
END {
  print BUF
}
- Druhé pravidlo nalepí každý riadok do buffera BUF.
- Prvé pravidlo vraví, že ak na začiatku riadku sú dve pomlčky --, vyprintuje obsah buffera a vymaže buffer.
- Tretie pravidlo vyprintuje obsah buffera na konci súboru.

přesně to co hawran nechce

Citace od: hawran diskuse kdy 02. 01. 2020, 16:46:47
pokud nechceš programovat úplně celé flow - vstup, zpracování, výstup

v perlu se obejdete bez explicitního čtení, printování, smyček. Ten příklad se spojením na jeden řádek by vypadal takto


grep -A1 root /etc/passwd | perl -lpe 'BEGIN {$/ = "--\n"} s/\n/ /g'
Název: Re:Boj s grepem
Přispěvatel: veskotskujehnusne kdy 03. 01. 2020, 11:20:07
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.

V mém příkladu je GPS poloha například: 14.444723,50.101715




22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2217 0000 7d11 e5c7 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0043 a7e8 2b41 434b  .....m&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3030  50,2019122821100
        0x0050:  302c 3233 3832 24                        0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2218 0000 7d11 e5c5 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0044 6c8f 2b52 4553  .....m&..Dl.+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3039  L50,201912282109
        0x0050:  3535 2c32 3338 3124                      55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2219 0000 7d11 e5c5 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0043 8d16 2b41 434b  .....=&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3230  50,2019122821120
        0x0050:  382c 3233 3834 24                        8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221a 0000 7d11 e5c3 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0044 5dc8 2b52 4553  .....=&..D].+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3132  L50,201912282112
        0x0050:  3033 2c32 3338 3324                      03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221b 0000 7d11 e5c3 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b f393 268f 0043 65be 2b41 434b  ......&..Ce.+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3730  50,2019122821170
        0x0050:  382c 3233 3836 24                        8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221c 0000 7d11 e56c 0a23 6281  E`.."...}..l.#b.
        0x0010:  c0a8 080b f393 268f 0099 f2d4 2b42 5546  ......&.....+BUF
        0x0020:  463a 4754 4354 4e2c 3535 3031 3031 2c38  F:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3432 2c32 3130 2e33 2c31 342e 3434  0,42,210.3,14.44
        0x0060:  3435 3132 2c35 302e 3130 3137 3232 2c32  4512,50.101722,2
        0x0070:  3031 3931 3232 3832 3130 3935 372c 3032  0191228210957,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3430 392c 3233 3835 24         8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221d 0000 7d11 e56b 0a23 6281  E`.."...}..k.#b.
        0x0010:  c0a8 080b f393 268f 0099 f7a3 2b52 4553  ......&.....+RES
        0x0020:  503a 4754 4354 4e2c 3535 3031 3031 2c38  P:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3930 2c32 3039 2e37 2c31 342e 3434  0,90,209.7,14.44
        0x0060:  3437 3233 2c35 302e 3130 3137 3135 2c32  4723,50.101715,2
        0x0070:  3031 3931 3232 3832 3131 3435 352c 3032  0191228211455,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3930 382c 3233 3837 24         8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221e 0000 7d11 e5c0 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0043 9598 2b41 434b  ......&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3931  50,2019122821191
        0x0050:  372c 3233 3839 24                        7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221f 0000 7d11 e5be 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0044 6648 2b52 4553  ......&..DfH+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3139  L50,201912282119
        0x0050:  3134 2c32 3338 3824                      14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2220 0000 7d11 e5be 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b de0a 268f 0043 8438 2b41 434b  ......&..C.8+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3132 3132  50,2019122821212
        0x0050:  352c 3233 3842 24                        5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2221 0000 7d11 e5bc 0a23 6281  E`.X"!..}....#b.
        0x0010:  c0a8 080b de0a 268f 0044 3fff 2b52 4553  ......&..D?.+RES

Název: Re:Boj s grepem
Přispěvatel: hawran diskuse kdy 03. 01. 2020, 11:20:21
Citace od: gilll kdy 03. 01. 2020, 11:14:20
Citace od: novotnyr kdy 03. 01. 2020, 10:35:00
...
přesně to co hawran nechce
:o
Zřejmě víš něco, co nevím já...
Název: Re:Boj s grepem
Přispěvatel: veskotskujehnusne kdy 03. 01. 2020, 11:27:52
Já s tím fórem neumím, rozhodl jsem se to trochu anonimizovat, ale když dám upravit, mám nový příspěvek. :)
Název: Re:Boj s grepem
Přispěvatel: Standa Blábol kdy 03. 01. 2020, 11:41:38
Citace od: veskotskujehnusne kdy 03. 01. 2020, 11:20:07
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.

V mém příkladu je GPS poloha například: 14.444723,50.101715




22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2217 0000 7d11 e5c7 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0043 a7e8 2b41 434b  .....m&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3030  50,2019122821100
        0x0050:  302c 3233 3832 24                        0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2218 0000 7d11 e5c5 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0044 6c8f 2b52 4553  .....m&..Dl.+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3039  L50,201912282109
        0x0050:  3535 2c32 3338 3124                      55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2219 0000 7d11 e5c5 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0043 8d16 2b41 434b  .....=&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3230  50,2019122821120
        0x0050:  382c 3233 3834 24                        8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221a 0000 7d11 e5c3 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0044 5dc8 2b52 4553  .....=&..D].+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3132  L50,201912282112
        0x0050:  3033 2c32 3338 3324                      03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221b 0000 7d11 e5c3 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b f393 268f 0043 65be 2b41 434b  ......&..Ce.+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3730  50,2019122821170
        0x0050:  382c 3233 3836 24                        8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221c 0000 7d11 e56c 0a23 6281  E`.."...}..l.#b.
        0x0010:  c0a8 080b f393 268f 0099 f2d4 2b42 5546  ......&.....+BUF
        0x0020:  463a 4754 4354 4e2c 3535 3031 3031 2c38  F:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3432 2c32 3130 2e33 2c31 342e 3434  0,42,210.3,14.44
        0x0060:  3435 3132 2c35 302e 3130 3137 3232 2c32  4512,50.101722,2
        0x0070:  3031 3931 3232 3832 3130 3935 372c 3032  0191228210957,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3430 392c 3233 3835 24         8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221d 0000 7d11 e56b 0a23 6281  E`.."...}..k.#b.
        0x0010:  c0a8 080b f393 268f 0099 f7a3 2b52 4553  ......&.....+RES
        0x0020:  503a 4754 4354 4e2c 3535 3031 3031 2c38  P:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3930 2c32 3039 2e37 2c31 342e 3434  0,90,209.7,14.44
        0x0060:  3437 3233 2c35 302e 3130 3137 3135 2c32  4723,50.101715,2
        0x0070:  3031 3931 3232 3832 3131 3435 352c 3032  0191228211455,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3930 382c 3233 3837 24         8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221e 0000 7d11 e5c0 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0043 9598 2b41 434b  ......&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3931  50,2019122821191
        0x0050:  372c 3233 3839 24                        7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221f 0000 7d11 e5be 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0044 6648 2b52 4553  ......&..DfH+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3139  L50,201912282119
        0x0050:  3134 2c32 3338 3824                      14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2220 0000 7d11 e5be 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b de0a 268f 0043 8438 2b41 434b  ......&..C.8+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3132 3132  50,2019122821212
        0x0050:  352c 3233 3842 24                        5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2221 0000 7d11 e5bc 0a23 6281  E`.X"!..}....#b.
        0x0010:  c0a8 080b de0a 268f 0044 3fff 2b52 4553  ......&..D?.+RES



Normalne vezmi jako zaklad ten muj cyklus nacitani soubor v perlu.
Cti to po radkach, regexem na casovou znacku (22:09:58.868523 IP) poznas prvni radek bloku a vyparsuj si datum, a vynuluj string akumulator,
pak dalsi radky s payloadem poznas regexem podle znacky 0x<numero> (ostatni radky ignoruj), v kazdem takovem radku vyhledej text payload podle pozice na radku az do konce razdku, ten postupne strkej to string akumulatoru az do dalsiho pocatku bloku. V teto chvili zavolej subrutinu, ktera v akumulator retezci regexem vyhleda pozadovane udaje.

Hotovo, trivialita.

Lamat grep bude narocnejsi, nez tenhle primitivni perl skript.
Název: Re:Boj s grepem
Přispěvatel: Standa Blábol kdy 03. 01. 2020, 11:44:41
Citace od: veskotskujehnusne kdy 03. 01. 2020, 11:20:07
Všem děkuji za rady, ale lepší asi bude, když upřesním, co řeším. Mám pochytané packety do pcap, v některých je záznam o GPS poloze. Já potřebuji získat seznam GPS poloh s časem, který je uveden na první řádce a mezi ideálně časy, kdy v tom packetu ta poloha nebyla. Poloha bývá v packetech nad length 170.

V mém příkladu je GPS poloha například: 14.444723,50.101715




22:09:58.868523 IP (tos 0x60, ttl 125, id 8727, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2217 0000 7d11 e5c7 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0043 a7e8 2b41 434b  .....m&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3030  50,2019122821100
        0x0050:  302c 3233 3832 24                        0,2382$
22:09:59.348520 IP (tos 0x60, ttl 125, id 8728, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49261 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2218 0000 7d11 e5c5 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c06d 268f 0044 6c8f 2b52 4553  .....m&..Dl.+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3039  L50,201912282109
        0x0050:  3535 2c32 3338 3124                      55,2381$
22:12:06.950835 IP (tos 0x60, ttl 125, id 8729, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2219 0000 7d11 e5c5 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0043 8d16 2b41 434b  .....=&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3230  50,2019122821120
        0x0050:  382c 3233 3834 24                        8,2384$
22:12:07.429099 IP (tos 0x60, ttl 125, id 8730, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.53565 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221a 0000 7d11 e5c3 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b d13d 268f 0044 5dc8 2b52 4553  .....=&..D].+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3132  L50,201912282112
        0x0050:  3033 2c32 3338 3324                      03,2383$
22:17:10.346636 IP (tos 0x60, ttl 125, id 8731, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221b 0000 7d11 e5c3 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b f393 268f 0043 65be 2b41 434b  ......&..Ce.+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3730  50,2019122821170
        0x0050:  382c 3233 3836 24                        8,2386$
22:17:10.766337 IP (tos 0x60, ttl 125, id 8732, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221c 0000 7d11 e56c 0a23 6281  E`.."...}..l.#b.
        0x0010:  c0a8 080b f393 268f 0099 f2d4 2b42 5546  ......&.....+BUF
        0x0020:  463a 4754 4354 4e2c 3535 3031 3031 2c38  F:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3432 2c32 3130 2e33 2c31 342e 3434  0,42,210.3,14.44
        0x0060:  3435 3132 2c35 302e 3130 3137 3232 2c32  4512,50.101722,2
        0x0070:  3031 3931 3232 3832 3130 3935 372c 3032  0191228210957,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3430 392c 3233 3835 24         8211409,2385$
22:19:06.951354 IP (tos 0x60, ttl 125, id 8733, offset 0, flags [none], proto UDP (17), length 173)
    10.35.98.129.62355 > denethor.cz0.9871: [udp sum ok] UDP, length 145
        0x0000:  4560 00ad 221d 0000 7d11 e56b 0a23 6281  E`.."...}..k.#b.
        0x0010:  c0a8 080b f393 268f 0099 f7a3 2b52 4553  ......&.....+RES
        0x0020:  503a 4754 4354 4e2c 3535 3031 3031 2c38  P:GTCTN,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 2c30 2c32 2c2c 312c 312c 302e  L50,,0,2,,1,1,0.
        0x0050:  302c 3930 2c32 3039 2e37 2c31 342e 3434  0,90,209.7,14.44
        0x0060:  3437 3233 2c35 302e 3130 3137 3135 2c32  4723,50.101715,2
        0x0070:  3031 3931 3232 3832 3131 3435 352c 3032  0191228211455,02
        0x0080:  3330 2c30 3030 312c 3430 3332 2c30 3344  30,0001,4032,03D
        0x0090:  392c 2c2c 3030 3030 2c32 3031 3931 3232  9,,,0000,2019122
        0x00a0:  3832 3131 3930 382c 3233 3837 24         8211908,2387$
22:19:16.327809 IP (tos 0x60, ttl 125, id 8734, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 221e 0000 7d11 e5c0 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0043 9598 2b41 434b  ......&..C..+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3131 3931  50,2019122821191
        0x0050:  372c 3233 3839 24                        7,2389$
22:19:16.808192 IP (tos 0x60, ttl 125, id 8735, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.49845 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 221f 0000 7d11 e5be 0a23 6281  E`.X"...}....#b.
        0x0010:  c0a8 080b c2b5 268f 0044 6648 2b52 4553  ......&..DfH+RES
        0x0020:  503a 4754 5044 502c 3535 3031 3031 2c38  P:GTPDP,550101,8
        0x0030:  3633 3537 3430 3430 3732 3530 3436 2c47  63574040725046,G
        0x0040:  4c35 302c 3230 3139 3132 3238 3231 3139  L50,201912282119
        0x0050:  3134 2c32 3338 3824                      14,2388$
22:21:24.229976 IP (tos 0x60, ttl 125, id 8736, offset 0, flags [none], proto UDP (17), length 87)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 59
        0x0000:  4560 0057 2220 0000 7d11 e5be 0a23 6281  E`.W"...}....#b.
        0x0010:  c0a8 080b de0a 268f 0043 8438 2b41 434b  ......&..C.8+ACK
        0x0020:  3a47 5448 4244 2c35 3530 3130 312c 3836  :GTHBD,550101,86
        0x0030:  3335 3734 3034 3037 3235 3034 362c 474c  3574040725046,GL
        0x0040:  3530 2c32 3031 3931 3232 3832 3132 3132  50,2019122821212
        0x0050:  352c 3233 3842 24                        5,238B$
22:21:24.668765 IP (tos 0x60, ttl 125, id 8737, offset 0, flags [none], proto UDP (17), length 88)
    10.35.98.129.56842 > denethor.cz0.9871: [udp sum ok] UDP, length 60
        0x0000:  4560 0058 2221 0000 7d11 e5bc 0a23 6281  E`.X"!..}....#b.
        0x0010:  c0a8 080b de0a 268f 0044 3fff 2b52 4553  ......&..D?.+RES



A jeste jednodussi bude zkrapka pouzit perl knihovnu na PCAP soubory.
https://metacpan.org/pod/File::PCAP::Reader

Coz je uz uplna trivialita, staci v cyklu nad souborem volak nextpacket(),prevest si HEX payload do ascii stringu a vyparsovate zde regexem GPS pozici.
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 03. 01. 2020, 14:15:55

#!/usr/bin/perl -nl

$time = $1 if /^(\d\d:\d\d:\d\d\.\d+) IP/;
$data = $1 if /^\s+0x0050:.*(.{5})$/;
if (/^\s+0x0060:.*(.{16})$/) {
        $data .= $1;
        print "$time\t$1,$2" if $data =~ /(\d+\.\d+),(\d+\.\d+),/;
}


tohle by mělo fungovat, jestli je poloha pokaždé na stejné pozici, ale jak píše Standa Blábol, lepší použít knihovnu.
Název: Re:Boj s grepem
Přispěvatel: oho kdy 03. 01. 2020, 16:43:48
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.

$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done

1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$


... a dale grepovat, sedovat, nebo cokolivstimdaldelat...
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 03. 01. 2020, 17:14:00
Citace od: oho kdy 03. 01. 2020, 16:43:48
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.

$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done

1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$


... a dale grepovat, sedovat, nebo cokolivstimdaldelat...

on chce vytisknout čas a souřadnice. Moje řešení funguje. Tvoje ne.
Název: Re:Boj s grepem
Přispěvatel: Standa Blábol kdy 03. 01. 2020, 17:52:58
Citace od: oho kdy 03. 01. 2020, 16:43:48
A nebo prestat onanovat nad Perlem a pouzit veci co jsou na to urceny.

$ tshark -nr dump.pcap -T fields -e frame.time_epoch -e data | while read timestamp hexdata; do echo $timestamp `echo $hexdata | xxd -r -p`; done

1578063514.667469000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$
1578063518.964255000 +RESP:GTPDP,550101,863574040725046,GL50,20191228211914,2388$
1578063520.553689000 +ACK:GTHBD,550101,863574040725046,GL50,20191228211917,2389$


... a dale grepovat, sedovat, nebo cokolivstimdaldelat...

Hlavni vyhoda tohoto navrhu oproti trivialnimu pouziti PERL knihovny je v pouziti proklate rychleho BASHE na zpracovani predzvykanych radku a prevod z hexu utilitou XXD, proces vytvaren pro kazdy radek znova.
Takova roztomila fork bombicka.

Otazka je, co ma byt ucelem, jestli jednorazove vyhodnoceni, nebo to ma nekde bezet trvale a generovat reporty.
Název: Re:Boj s grepem
Přispěvatel: oho kdy 03. 01. 2020, 18:06:11
Citace od: Standa Blábol kdy 03. 01. 2020, 17:52:58
Takova roztomila fork bombicka.

Radsi pouzivejte jen vyrazy kterym rozumite. Tohle opravdu neni fork bomba. Ani malinka.

Citace od: Standa Blábol kdy 03. 01. 2020, 17:52:58
Otazka je, co ma byt ucelem, jestli jednorazove vyhodnoceni, nebo to ma nekde bezet trvale a generovat reporty.

To souhlasim, ja pochopil ze to chce delat jednorazove. Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.

Citace od: gilll kdy 03. 01. 2020, 17:14:00
on chce vytisknout čas a souřadnice. Moje řešení funguje. Tvoje ne.

To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 03. 01. 2020, 18:24:58
Citace od: oho kdy 03. 01. 2020, 18:06:11
To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.

vyřešení problému není hraní. Je to kratší a rychlejší než tvoje ukázka jak se možná dá k řešení dopracovat.

Citace od: oho kdy 03. 01. 2020, 18:06:11
Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.

ty žádná konkrétní data neselektuješ, tak nemusíš na nic spoléhat.
Název: Re:Boj s grepem
Přispěvatel: veskotskujehnusne kdy 03. 01. 2020, 20:25:34
Děkuji ti, bylo tam pár drobných problémů, ale ty jsem už dořešil. Já bych tohle dohromady sám nedal, Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.

Citace od: gilll kdy 03. 01. 2020, 18:24:58
Citace od: oho kdy 03. 01. 2020, 18:06:11
To nebylo reseni ale ukazka jak se k reseni jednoduse dopracovat. Ale klidne si tu dal hrajte s Perlem, me je to fuk.

vyřešení problému není hraní. Je to kratší a rychlejší než tvoje ukázka jak se možná dá k řešení dopracovat.

Citace od: oho kdy 03. 01. 2020, 18:06:11
Kazdopadne je to porad lepsi nez ten Perl, ktery pomalu spoleha i na to ze zitra bude 5 stupnu a na nebi videt 823 hvezd.

ty žádná konkrétní data neselektuješ, tak nemusíš na nic spoléhat.
Název: Re:Boj s grepem
Přispěvatel: neregistrovany kdy 04. 01. 2020, 12:17:54
Citace od: veskotskujehnusne kdy 03. 01. 2020, 20:25:34
Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.

Rozumnej pristup cloveka, kterej si uvedomuje ze casu neni neomezene a pocitace nejsou jedina vec na svete....
Název: Re:Boj s grepem
Přispěvatel: gilll kdy 04. 01. 2020, 13:08:12
Citace od: neregistrovany kdy 04. 01. 2020, 12:17:54
Citace od: veskotskujehnusne kdy 03. 01. 2020, 20:25:34
Perlu jsem se nikdy nevěnoval a když potřebuji jednorázově vyřešit problém, nehodí se předtím něco týden studovat.

Rozumnej pristup cloveka, kterej si uvedomuje ze casu neni neomezene a pocitace nejsou jedina vec na svete....

rozumnější investice než kombinovat X různých nedokonalých nástrojů, každý s jiným dialektem regexpů, pomocí kterých stejně nic nevyřešíte. Jen prohlásíte, že by to teoreticky šlo. Na "unixovou filozofii" nemám čas. Rovnou to vyřeším v perlu, ruby nebo pythonu.