Hallo,
Van egy tabulátorral tagolt szöveges logom rsync lefutása után, ebből szeretnék adatokat bányászni.
6 oszlop/mező van, a hatodik az átvitt fájl neve ami viszont néha tartalmazhat szóközt is.
Ha van bent szóköz akkor a $6 ra az awk csak az első szóközik ad vissza a fájl nevéből. Perl esetén a split nél van rá lehetőség a mezők maximalizálására, az általam használt awk a -mf opciót nem ismeri.
Kérdés lehet-e egyszerűen rávenni az awk-t hogy csak 6 mezőre bontsa az adott sort.
Másik, hol tudnám megadni hogy a rendszer által generált levelek (főként cron) milyen feladó email-címet használjon. Forwardolni szeretnem a leveleket külső emailcímre, de a nem létező email címről érkező leveleket a levélszerverek kidobják.
Köszi a válaszokat
Meng
- 1124 megtekintés
Hozzászólások
hello! az awk-s kérdéshez: 1. man awk :) 2. hasonló problémát úgy oldottam meg, hogy a BEGIN részben explicite megadtam, hogy FS="\t". A Field Separator alapértelmezettként Space.
- A hozzászóláshoz be kell jelentkezni
Ez nagy segítség volt. Gondolom a man parancsot csak ismeri és valószínűleg olvasgatta is, csak gondolom gyorsan kellett neki a megoldás és nem találta meg, ezért kérdezett itt.
Egyébként a field separator beállítása szóközökre, az még nem teljesen elég szerintem. Valami olyasmi kellene, hogy a hatodik oszloptól szeretném a maradék többit kiiratni.
Nekem is volt hasonló problémám, de sajnos nem emlékszem hogy oldottam meg. Túl sokat nem kell awk -t használnom.
--
http://laszlo.co.hu/
- A hozzászóláshoz be kell jelentkezni
hello,
Az FS beallitasnal regexp-et is lehet megadni, tehat az FS="[ \t]" is megegengedett. Ha nem eszi, akkor vannak kulonbozo awk verziok, awk, mawk,gawk stb. Ezek pont ilyen kis nuanszokban ternek el egymastol.
- A hozzászóláshoz be kell jelentkezni
Vajon tudnék-e olyan fájlnevet létrehozni amiben tabulátor szerepel? Ezt még tesztelnem kell. Ha a FS-ban a "\t"-t megfelelő mennyiségű szóközökkel kiváltom, akkor csak a (tabulátorral elválasztott) input első oszlopát bírja felismerni. Amíg az útvonalnévben (akár utolsó oszlop vagy közbenső) nincs tabulátor szntem jól kell működnie a "\t"-s elválasztásnak.
- A hozzászóláshoz be kell jelentkezni
touch $'\t'
- A hozzászóláshoz be kell jelentkezni
Igen, az FS="\t"-vel való megoldás nem jó. Vizsgálni kell az escape-szekvenciákat amik vmlyen elválasztóként fognak szerepelni.
- A hozzászóláshoz be kell jelentkezni
Szia.
Az nem jo megoldas, ha az awk elott kicsereled a szokozoket a fileben. Ha tenyleg tabulatorral van elvalasztva a tobbi akkor "cat file.log | tr '\ ' '_' | awk ..." lehet jo megoldas.
- A hozzászóláshoz be kell jelentkezni
Hallo,
A szeparátort nem érdemes szerintem változtatni, mert a listám vagy szóközzel, vagy tab-okkal van szeparálva, ha berakok helyére valami más karaktert, majd ezt megmondom az awk-nak akkor ugyanott vagyok.
A kulcs az NF változó lehet, csak ezt sajna nem beállítani hanem kiolvasni kell. Így adott az a megoldás, hogy $6 tól NF ig végigmegyek for ciklussal, majd összefűzöm és kiiratom őket, de szerintem az awk nem ilyen nehézkes, és biztos van valami egyszerűbb helyette. ha nem akkor a perl split-je lesz a megoldás.
Köszi a válaszokat, a 2-es re valami ötlet? Első gondolatként a root-nak az emilcíme ami a root@[hostname|dnsdomainname] -ből komponálódik? Ezt változóval felül tudom íratni, de szerintem ez sem az igazi.
Meng
- A hozzászóláshoz be kell jelentkezni
awk-nak is vannak beépített string függvényei.
- A hozzászóláshoz be kell jelentkezni