使用$ 1在bash脚本中使用awk提取一些文本

时间:2016-07-29 09:21:03

标签: linux bash shell awk

您好我正在尝试编写脚本,以便在使用awk从文本文件中满足表达式时提取一行。

因此,如果我在shell中使用此命令我正确输出但在脚本上它不起作用可能因为$ 1被识别为用户在shell上给出的参数。 / p>

这是我的剧本:

#!/bin/bash
declare -a email=(test@test.com)
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 个答案:

答案 0 :(得分:1)

试试这个;

#!/bin/bash
a=$1
declare -a email=(test@test.com)
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

答案 1 :(得分: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}}'`