Aktywne Wpisy
Jak zapatrujecie się na "równy podział" wydatków w domu? Załóżmy, że kobieta zarabia 3 razy mniej od partnera. Co miesiąc ponoszą wydatki na prąd, gaz, wodę, czynsz, internet, środki czystości, jedzenie itp.
Jaki podział jest według was sprawiedliwy?
A) Oboje płacą po tyle samo, np wydatki wynoszą miesięcznie 3000zl to oboje płacą po 1500 i ile komu z jego pensji zostanie, to jest jego.
B) Facet płaci rachunki i opłaty a kobieta
Jaki podział jest według was sprawiedliwy?
A) Oboje płacą po tyle samo, np wydatki wynoszą miesięcznie 3000zl to oboje płacą po 1500 i ile komu z jego pensji zostanie, to jest jego.
B) Facet płaci rachunki i opłaty a kobieta
Która odpowiedź jest według ciebie sprawiedliwa?
- A 54.0% (174)
- B 6.8% (22)
- C 32.6% (105)
- D 6.5% (21)
thorgoth +358
---TRANSACTION 1234, not started
---TRANSACTION 5325, not started
---TRANSACTION 8706456, ACTIVE 849 sec
2 lock struct(s), heap size 360, 1 row lock(s)
MySQL thread id 26674, OS thread handle 0x7f2426942700,
---TRANSACTION 64363, not started
Zależy mi, żeby wyłapać aktywne transakcje, ale tylko aktywne - powiedzmy - powyżej 100 sekund. Jeśli znajdzie, ma wypluć kolejne 3 linie.
Na razie mam coś takiego:
./innodbcheck.sh | awk '/---TRANSACTION.*ACTIVE/{c=3}c&&c--'
daje:
---TRANSACTION 8706456, ACTIVE 849 sec
2 lock struct(s), heap size 360, 1 row lock(s)
MySQL thread id 26674, OS thread handle 0x7f2426942700,
Ale teraz chciałbym, żeby liczba między ACTIVE a sec była większa od 100 (na przykładzie powyżej 849). Jeśli tam będzie 99, to ma nie dopasować. 101 - ma wyprintować wszystkie 3 linie.
Jakby ktoś mógł mnie przynajmniej naprowadzić. Wiem, że muszę się jakoś odwołać do $4, ale nie mam pojęcia jak połączyć warunek z patternem :/
Mile widziane także jakieś przystępne tutoriale do awk, żeby stopniowo wprowadzały w ten program w stylu "od zera do bohatera" ;)
#linux #awk
$ grep -PA 3 "ACTIVE \d{3,}" plik
--- transaction 34534534, ACTIVE 849 sec
wes1
sdsd1
dasda1
--
--- transaction 34534534, ACTIVE 84932 sec
wwqde3
qas3
das3
-P włącza perla
-A 3 - pokaż 3 linie po (after) znaleziony string
\d - cyfry
{3,} - 3 i więcej
Plik:
$ cat plik
--- transaction 34534534, ACTIVE 849 sec
wes1
sdsd1
dasda1
asdas1
--- transaction 3434345, ACTIVE 38 sec
Ale Twoje rozwiązanie będzie działało póki nie znajdę innego - dobrze wiedzieć, że grep też potrafi wypluć kilka linii (y).
---TRANSACTION.*ACTIVE [0-9]{3,}
, chciałem na początku odsiać samym regexem liczby min. 3 cyfrowe, ale widze, że chcesz konkretną liczbę porównywaćale naiwnie zadziałało
{if ($4 > 98) c=3} c&&c--
( ͡° ͜ʖ ͡°)$4 to po prostu pozycja po rozdzieleniu tekstu domyślnym separatorem
awk '(/---TRANSACTION.*ACTIVE/ && $4>120) {c=3}c&&c--'
Kurde, nie wiem jak ja to pisałem, że mi na początku nie chciało działać :/ Okazuje się, że warunki się wstawia zwyczajnie i wygląda na to, że niepotrzebnie kombinowałem aż nadto.
Po drodze dołączyłem jeszcze sed żeby robił porządki z newline. Teraz działa.
Dzięki :)