szovegfajlbol mezok keresese

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.

Hozzászólások

$ 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

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ó.

É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?

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?

É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?

+ 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ó.

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 '$,'

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ó.