2017-03-02 3 views
0

Ich muss die Lease-IP "192.168.21.100", Hardware-Ethernet "14: 10: 9f: f2: 1d: 00" und Client-Host-Name "2015cmoran-2" extrahieren .Awk Unix macht mehrere Zeilen in eins und extrahiert Wörter

und es muss wie diese

"192.168.21.100" in einer Linie sein "14: 10: 9f: f2: 1D: 00", "2015cmoran-2"

lease 192.168.21.100 { 
starts 4 2017/03/02 05:43:15; 
ends 4 2017/03/02 17:43:15; 
cltt 4 2017/03/02 05:43:15; 
binding state active; 
next binding state free; 
rewind binding state free; 
hardware ethernet 14:10:9f:f2:1d:00; 
uid "\001\024\020\237\362\035\000"; 
client-hostname "2015cmoran-2"; 
} 
server-duid "\000\001\000\001 IL\264x\243Q\031O\032"; 

ich habe diese getan, aber ich glaube nicht, das ist der richtige Weg ist es

die Linien diese
cat /var/dhcpd.leases | sed 's/;//g' | sed 's/"//g' | awk '{for (I=1;I<=NF;++I) if ($I == "client-hostname") {print $2};}' 

cat /var/dhcpd.leases | sed 's/;//g' | sed 's/"//g' | awk '{for (I=1;I<=NF;++I) if ($I == "ethernet") {print $3};}' 
+0

Die Katze | sed' und 'sed | awk "sind beide Varianten des gemeinsamen Antipatterns [nutzloser Gebrauch von' Katze'] (http://www.iki.fi/era/unix/award.html). Sie sollten null Vorkommen von 'cat' benötigen, es sei denn, Sie verketten mehrere Eingabedateien und selten mehr als eine von' grep', 'sed' oder Awk in derselben Pipeline. – tripleee

+0

'cat /var/dhcpd.leases | sed 's /; // g' | sed 's/"// g'' kann als' sed 's/[;"] // g'/var/dhcpd.leases 'geschrieben werden –

Antwort

0
x=$(awk -v ORS="," '/lease/||/hardware ethernet/||/client-hostname/{gsub(/{|\;|\"/,"");print "\""$NF"\"" }' inputfile|sed -r 's/(^.*),/\1/') 


echo $x 
"192.168.21.100","14:10:9f:f2:1d:00","2015cmoran-2" 

filtert nach unten zu tun, dieenthalten 10, dann gsub würde verwendet, um Zeichen wie {|}|;|" herauszufiltern. Sobald dies geschehen ist, drucken Sie die Linien. Beachten Sie, dass ORS zu Komma geändert wird. sed wird verwendet, um das letzte Komma-Zeichen zu entfernen, das von ORS kommt.

Verwandte Themen