2016-07-29 50 views
-1

嗨我想写一个脚本以便提取一行,如果从使用awk的文本文件满足表达式。

所以,如果我在shell中使用这个命令,我有正确的输出,但在脚本上它不起作用,也许是因为$ 1被识别为用户在shell上给出的参数。

这是我的脚本:

#!/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 

而是由脚本发送的电子邮件只有这身:

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

我怎样才能做到这一点?

+2

请提供可验证的样本输入和期望输出 – Inian

回答

1

试试这个;

#!/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

非常感谢那的作品! – tafazzi87

+0

所以从我看到的是使用'-v var =“$ a” – fedorqui

0

试图逃跑内awk中的$煤焦与\

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}}'`