AWK - SED
awk
è una utility usata per estrarre dati e produrre report
awk separa le righe in campi utilizzando il simbolo ":" ed estrae la stringa prima del 4 valore di ":"
# awk -F : '/oracle/ { print $4 }' /etc/passwd
54321Stampa la stringa a destra dell'ultimo ':'
# awk -F : '{ print $NF }' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
# ps aux | awk '{ print $NF}'
Stampa l'ultima colonna dei processi attivi.
sed
è usato per visualizzare testi. Ad esempio visualizzare la 5 riga del file /etc/passwd.
sed -n 5p /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Esempio:
Da questa riga che è in un file di log 31-JAN-2023 23:58:53 * (CONNECT_DATA=(SID=PROT)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=tomcat))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.121.2.9)(PORT=41294)) * establish * PROT * 0
devo estrarre queste informazioni
(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=tomcat))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.121.2.9)(PORT=41294))
Ogni campo è separato da un pipe.
echo "SID|PROGRAM|HOST|USER|PROTOCOL|HOST|PORT" && cat nomedelfiledilog.txt |
echo "SID|PROGRAM|HOST|USER|PROTOCOL|HOST|PORT" && cat nomedelfiledilog.txt |
awk -F= '{print $3 "§1§" $5 "§2§" $6 "§3§" $7 "§4§" $9 "§5§" $10 "§6§" $11}' |
sed 's/).*§1§/|/' | sed 's/).*§2§/|/' | sed 's/).*§3§/|/'| sed 's/).*§4§/|/'| sed 's/).*§5§/|/'| sed 's/).*§6§/|/'| sed 's/).*$//'
> estrazione.txt
> estrazione.txt
- echo stampa i nomi di colonna
- awk separa le righe in campi utilizzando il simbolo "=" e inserisce dei bookmark
- i vari sed sostituiscono le parti inutili fino ai bookmark con un pipe
- i vari sed sostituiscono le parti inutili fino ai bookmark con un pipe