我正在努力获取我想要的信息,我们正在使用垃圾邮件过滤器,可以通过API调用进行监控。
我们使用PRTG作为监控,PRTG正在调用Bash脚本,该脚本使用curl调用API。
我需要使用的信息由此行调用。
queue=$(curl -u USER:PASS -X GET -H "Content-Type: application/http" https://mx10.mailfilter.nl/cgi-bin/api?call=api_delivery_queue&sort_field=domain,server)
OUTPUT:(lines below the domain are associated with te domain)
domain1.TLD
mx10.mailfilter.nl,1csiOn-00012P-QL,2017-03-28 21:08:29
mx20.mailfilter.nl,1csLqx-0004fO-EM,2017-03-28 21:08:29
domain2.TLD
mx10.mailfilter.nl,1csvTq-0007a4-MS,2017-03-28 21:08:29
mx10.mailfilter.nl,1csvhh-0000gI-5s,2017-03-28 21:08:29
mx10.mailfilter.nl,1cswCX-0004bQ-Iz,2017-03-28 21:08:29
mx10.mailfilter.nl,1csvk3-00013I-Rx,2017-03-28 21:08:29
domain3.TLD
mx10.mailfilter.nl,1csbxg-0005sG-Px,2017-03-28 21:08:29
我需要将其分解为:(其中数字是与域关联的行数) 预期产出:
domain1.TLD 2
domain2.TLD 4
domain3.TLD 1
totalcount=$(curl -u USER:PASS -X GET -H "Content-Type: application/http" https://mx10.mailfilter.nl/cgi-bin/api?call=api_get_delivery_queue_count&domain=default)
最后echos 0:$ totalcount:$ queue
编辑:(29-03)
我的例子可能不像我所说的那样清晰:)
domain1.TLD domain2.TLD .. 只是一些例子,域的变化是巨大的。从A到Z。静态的行以mx10或mx20开头。
来自Vipin的命令可以解决我将在明天尝试的那个。
答案 0 :(得分:0)
这是众多方法中的一种,希望这会有所帮助:
echo -e "$totalcount" | grep -o domain | wc -l
grep with -o选项意味着它将“domain”的每个匹配值打印到一个单独的输出行上,然后用wc -l计算这些换行符。
答案 1 :(得分:0)
试试这个 -
$ cat f
domain1.TLD
mx10.mailfilter.nl,1csiOn-00012P-QL,2017-03-28 21:08:29
mx20.mailfilter.nl,1csLqx-0004fO-EM,2017-03-28 21:08:29
domain2.TLD
mx10.mailfilter.nl,1csvTq-0007a4-MS,2017-03-28 21:08:29
mx10.mailfilter.nl,1csvhh-0000gI-5s,2017-03-28 21:08:29
mx10.mailfilter.nl,1cswCX-0004bQ-Iz,2017-03-28 21:08:29
mx10.mailfilter.nl,1csvk3-00013I-Rx,2017-03-28 21:08:29
domain3.TLD
mx10.mailfilter.nl,1csbxg-0005sG-Px,2017-03-28 21:08:29
$ awk -F, 'NF==1 {h=$0} {(NF==1?k=1:t[h]=k++)} END {for (h in t) print h,t[h]}' f
domain2.TLD 4
domain1.TLD 2
domain3.TLD 1
按排序顺序 -
awk -F, 'NF==1 {h=$0} {(NF==1?k=1:t[h]=k++)} END {
> PROCINFO["sorted_in"] = "@ind_str_asc"
> for (h in t) print h,t[h]}' f
domain1.TLD 2
domain2.TLD 4
domain3.TLD 1
答案 2 :(得分:0)
$ awk '/^domain[0-9]+\.TLD/{if(p)print p,c;p=$0;c=0;next}{c++}END{print p,c}' file
domain1.TLD 2
domain2.TLD 4
domain3.TLD 1
说明:
/^domain[0-9]+\.TLD/ { # domain*TLD records:
if(p) print p, c # print p revious domain and c ount
p=$0 # reset vars
c=0
next # next record
}
{ c++ } # count other records
END { print p, c } # print the last domain*TLD