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

54321

Stampa 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))

Questi permette di avere una tabella che puoi portare anche in excel. 
Ogni campo è separato da un pipe.


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



- 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



Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione