Ich bin sehr neu zu awk, und versuche, es zu verwenden, um eine Protokolldatei zu analysieren. Die Datei enthält Informationen zur Flash-Version, falls installiert. Die Linie ich suche ist wie:Verwenden von awk, um übereinstimmenden Inhalt zu finden
Fri Apr 8 11:38:39 EDT 2016: Current Flash version: noflash
Also ich ein Drehbuch geschrieben suchen:
#!/bin/bash
NOFLASH=`awk -F ' ' '($2 == "Apr") && ($3 == "8") && ($10 == "noflash") { print $10 }' /Library/Logs/FlashUpdateScript.log`
if [ "$NOFLASH" = *noflash* ];then
echo "Flash not installed on Apr 8"
else echo "Flash was installed on Apr 8"
fi
Das Problem ist, dass es mehrere Zeilen sein, die April enthalten 8 und noflash, so in In diesen Fällen gibt es nicht den Wert "Flash nicht installiert" zurück, nach dem ich suche. Wie bearbeite ich dieses Skript, damit ich feststellen kann, ob am 8. April Flash installiert wurde?
Bitte nehmen Sie sich einen Blick auf [Editieren-Hilfe] (http://stackoverflow.com/editing-help). – Cyrus
Ihr Problem liegt im Shell-Skript, nicht im 'awk'. Wahrscheinlich willst du 'if [[" $ NOFLASH "== * noflash *]]', um eine Übereinstimmung zu erhalten. So wie es aussieht, wenn Sie nicht eine Datei haben, die 'noflash' im Namen enthält, suchen Sie buchstäblich nach' * noflash * ', nicht mit globbing. Sie sollten in der Lage sein, Ihr Bash-Skript (https://stackoverflow.com/questions/951336/how-to-debug-a-bash-script/951352#951352) mit 'bash -x' zu debuggen und zu sehen, was ist geht weiter. Mir ist nicht klar, was du willst, wenn es keinen Flash gibt, dann wurde Flash installiert, dann deinstalliert usw. –
wäre es nicht besser grep zu benutzen, um den Job zu machen? –