Van egy 1,5m bejegyzeses logfileom. Kicsit nagy a merete, majdnem 1G, szoval szeretnem csak az erdemi infot megtartani belole. Field separator a space, szoval awk/cut jol vagja.
Apro bibi, hogy nem egyforma a mezok szama....
cat nincs_ldaps.txt | awk '{print NF}' | sort |uniq -c
28722 32
8210 33
3436 34
21838 35
125861 36
190381 37
39358 38
276739 39
126 43
Szoval igy nehezen tudom kivagni pl. a 6,13 es 25 mezot (sajnos nem ugy van, hoyg a 32. mezoig ugyanaz es utana plusz infok...)
Valami otlet ra, hoyg mezoszam helyett hogyan lehetne mezonevre keresni ( ahogy nezem, a mezok "kulcs=ertek" alakban vannak, tehat kulcs alapjan lehetne.... )
Barmilyen megoldas erdekel, bash-t meg is ertem, mast nem biztos, de most jo lenne, ha mukodne....
Koszi.
- 857 megtekintés
Hozzászólások
Ok, ez segitett, csak a newlinet kellett megoldanom
https://unix.stackexchange.com/questions/502782/how-to-extract-specific…
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
$ awk -F: '$6~/home/ { print $1" => "$6}' /etc/passwd
syslog => /home/syslog
tibyke => /home/tibyke
kibana => /home/kibana
cups-pk-helper => /home/cups-pk-helper
- A hozzászóláshoz be kell jelentkezni
Koszi, ezzel kezdtem en is. De a passwd-ben minden bejegyzesben ugyanannyi field van.
EZ lett vegulis a megoldas
while read ; do echo -e "\n" >>aaaa ;echo $REPLY |awk -v RS=" " -v ORS=' ' '/^time=/ || /^proto=/ || /^src=/ || /^srcname=/ || /^dst=/ || /^dstname=/ || /^dstport*/' >>aaaa ; done < nincs_ldaps.txt
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
Mondjuk meg az ures sorokat ki kell szednem belole, de azt egy "grep -v ^$" megoldja
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
Én az AWK asszociatív tömbök irányából közelítettem volna meg, de az sokkal macerásabb lenne, mert ugya AWK-ban nincs eval. Viszont ilyenje van a Perl-nek hasz néven, meg eval-ja, is zsóval lehet az lenne a megfelelő, de szerintem amit (ki)találtál annál olvashatóbb ÉS rövidebb nem nagyon lesz.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Nem kell ide hash meg eval:
perl -lane 'print join " ", grep /^(time|proto|src)=/, @F'
Szerintem rovidebb es olvashatobb, es ami fontosabb, egyszerubben bovitheto, mint a fenti awk-os megoldas.
- A hozzászóláshoz be kell jelentkezni
Koszi. Hat ez az, perlt nem ismerem, szoval ezt csak begepeltem volna es ha valami nem ok, nem jottem volna ra, hol szurtam el.
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
AWK (sallangok eltávolítása után (*) ) :
awk -v RS=" " -v ORS=' ' '/^time=/ || /^proto=/ || /^src=/ || /^srcname=/ || /^dst=/ || /^dstname=/ || /^dstport*/' < nincs_ldaps.txt >>aaaa
Perl (a kihagyott dolgok beillesztése után):
perl -lane 'print join " ", grep /^(time|proto|src|srcname|dst|dstname|dstport)=/, @F' < nincs_ldaps.txt >>aaaa
Remélem, hogy az eredeti AWK-s megoldásban a dstport után csak elgépelés a * :-)
Azt látom, hogy a Perl rövidebb (főleg ha elhagyjuk a -a által implicit módon jelzett -n -et); nem érzem úgy, hogy új mezőt felvenni a kiírandók közé bármelyikben nehezebb lenne (bár ebben a formában AWK-ban többet kellene gépelni); és abban sem vagyok biztos, hogy olvashatóbb. De mindenesetre köszönöm, én biztosan tanulok a dologból.
Mindig is zavart, hogy a Perlnek annyi rengeteg opciója van és én csak nagyon keveset ismerek belőlük (pl. az e és n megvan, a másik kettőhöz kell a man perlrun, ami valami agyalágyult ok miatt a céges Ubi 1604-en nincs - sőt a fő, ámde szinte semmire nem jó man perl-en kívül semelyik abban hivatkozott nincs meg); valamint az iszonyat mennyiségű "belső változójával" is az a bajom, hogy fejből alig egy-kettőt ismerek (nyilván ha többet kódolnék Perlben és kevesebbet AWK-ban, akkor ez idővel változna, helyette fejből fújom, hogy man perlvar).
(*) én legalábbis most nem látom, hogy mi a mogorva francért kell a shellel soronként beolvastatni a fájlt és úgy odaadni pipe-ban az AWK-nak, közben gyárilag szerintem pont azt csinálná.
Ui: persze ha az AWK-nál is átírjuk olyanra a mintákat, mint amilyen a Per(l-)verziód, akkor már a hosszal sincs baj ;-)
awk -v RS=" " -v ORS=' ' '/^(time|proto|src|srcname|dst|dstname|dstport)=/' < nincs_ldaps.txt >>aaaa
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Ez a megoldás sztem szép. Kifejezetten esztétikus.
Windowsban hogy fogna hozzá ilyesmihez a hozzáértő?
- A hozzászóláshoz be kell jelentkezni
Én megnyomnám a Windows gombot, beírnám, hogy Ubu < Enter > , majd az így megnyíló WSL-beli shell ablakban becsépelném a megfelelő AWK vagy Perl sort. Igaz, én nem vagyok Windowshoz (se) hozzáértő. Amúgy nagy eséllyel Powershellben is csak azért hosszabb, mert abban szeretnek mind a parancsoknak (így hívják egyáltalán?) mind az opcióknak kilométeres neveket adni.
De remélhetőleg mindjárt jön valaki és becsépeli.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
+ ultrapluszkoszi.
Anno az unx utlist hasznaltam, ha normalis find/grep kellett, de akkor ez igy teljesen jo, ha batch filebol hivhato (mondjuk az utobbi ket evben nem volt ra szuksegem, scp/sz dolgokkal dobaltam fileokat win es lin kozott, amelyik eppen szukseges volt)
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
főleg ha elhagyjuk a -a által implicit módon jelzett -n -et
Valóban, a -a implikálja a -n-et, de jobb kiírni, mert egyrészt egyértelműen jelzi az olvasónak, hogy be van kapcsolva a sorfeldolgozó mód (de nem -p, tehát printelés nélkül), másrészt így idiomatikus, hogy -lane, így célszerű megjegyezni.
a Perlnek annyi rengeteg opciója van és én csak nagyon keveset ismerek belőlük
Ami még hasznos:
a -F és ritkábban a -0 a sorfeldolgozó mód perverzebb eseteihez (ha pl. CSV-t kell beolvasni),
a -c szintaxis-ellenőrzéshez,
és a -M, ha parancssoros varázsláskor valami modult akar használni az ember, esetleg a -I ha nem standard útvonalról kell a modult betölteni.
az iszonyat mennyiségű "belső változójával" is az a bajom, hogy fejből alig egy-kettőt ismerek
Többet nem is kell, nagyon ritkán van rájuk szükség. "Rendes" (tehát nem parancssoros, eldobható) kódokban kerülni is szoktam őket az elkerülhetetlenül szükségeseken kívül (@_, $@, esetleg $!). De még a fentihez hasonló egysorosakban is legtöbbször meg lehet úszni a használatukat: pl. a print join " ", ...
helyett írhattam volna, hogy $, = $"; print ...
, de joinnal olvashatóbb.
Egyébként a man perlvar helyett lehet perldocot is használni, az célszerűbb, ha csak egy konkrét változóra vagy kíváncsi: perldoc -v '$,'
- A hozzászóláshoz be kell jelentkezni
Koszi.
"Remélem, hogy az eredeti AWK-s megoldásban a dstport után csak elgépelés a * :-)"
Nem. Ketfele vegzodes lehet a "dstport" utan, es nem volt kedvem mindkettot kiirni. Lehetett volna ugyis persze, de ez is jo volt.
Egyetlen egyszer kellett a scriptet lefuttatnom, addig olvasgattam mast :)
(Nyilvan ha gyakrabban kellene, optimalizalnam, de most igy jo volt)
(ja, ez utobbi valasz a "(*)" megjegyzesre :)
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni
Koszi.
Vegulis mukodott es meg ertem is.
--
http://www.micros~1
Rekurzió: lásd rekurzió.
- A hozzászóláshoz be kell jelentkezni