2016-07-29 13 views
-1

Hallo, ich versuche, ein Skript zu schreiben, um eine Zeile zu extrahieren, wenn ein Ausdruck aus einer Textdatei mit awk erfüllt ist.

Also, wenn ich diesen Befehl in der Shell verwende, habe ich richtig ausgegeben, aber auf das Skript funktioniert es vielleicht nicht, weil $ 1 wie das Argument vom Benutzer auf Shell erkannt wird.

, dass mein Skript ist:

#!/bin/bash 
declare -a email=([email protected]) 
spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if ($1>500){print $2}}'` 
for i in "${email[@]}" 
do 
    echo "$spam"| /opt/zimbra/postfix/sbin/sendmail $i 
done 

aber die E-Mail durch das Skript gesendet hat nur diesen Körper:

su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if (>500){print }} 

Wie kann ich das tun?

+2

Bitte geben Sie einen überprüfbaren Abtastwerteingang und erwartete Ausgabe – Inian

Antwort

1

Versuchen Sie dies;

#!/bin/bash 
a=$1 
declare -a email=([email protected]) 
spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk -v var="$a" '{if (a>500){print $2}}'` 
for i in "${email[@]}" 
do 
    echo "$spam"| /opt/zimbra/postfix/sbin/sendmail $i 
done 
+0

vielen Dank, dass die Arbeiten zu entkommen! – tafazzi87

+0

Also von was ich sehe es war eine Frage der Verwendung von -V var = "$ a" ' – fedorqui

0

Versuchen Sie, die $ char innen awk mit \

spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if (\$1>500){print \$2}}'`