如何 awk if 具有多行条件

如何 awk if 具有多行条件

我的日志有一些问题,如果有一些匹配条件,需要一些警报。

一些日志条件如下:

2019-07-20|20:25|sorry system error|183
2019-07-20|20:25|Internal Error|8
2019-07-20|20:25|System Busy|1

我的期望如果字段$4 >= 100,它会print $0发送警报,curl条件如下:

curl -X GET "http://x.x.x.x:5000/submit_fajar.php?msg=print $0+`hostname`+time_`date +%d%h%y_%H.%M.%S`"

我已经尝试过以下条件,但仍然困惑如何curl使用print $0

cat datafiles  | strings | awk -F"|" '{if ($4 > 100)print ""$1","$2",please check have many error respond MFS",$3,"count :",$4;'}'' 

请帮忙

谢谢

答案1

这就是你想做的吗?

while IFS= read -r line; do
    curl "...$line..."
done < <(awk '...')

顺便说一句你的 awk 脚本:

awk -F"|" '{if ($4 > 100)print ""$1","$2",please check have many error respond MFS",$3,"count :",$4;'}''

应该:

awk -F'|' '$4 > 100{print $1 "," $2 ",please check have many error respond MFS", $3, "count :", $4}'

你的卷曲可能应该是这样的:

hostname="$(hostname)"
now="$(date +'%d%h%y_%H.%M.%S')"
curl -X GET "http://x.x.x.x:5000/submit_fajar.php?msg=\"${line}+${hostname}+${now}\""

前两行在循环之前,所以整个事情应该是这样的:

#!/bin/env bash

hostname="$(hostname)"
now="$(date +'%d%h%y_%H.%M.%S')"
while IFS= read -r line; do
    curl -X GET "http://x.x.x.x:5000/submit_fajar.php?msg=\"${line}+${hostname}+${now}\""
done < <(cat datafiles | strings | awk -F'|' '$4 > 100{print $1 "," $2 ",please check have many error respond MFS", $3, "count :", $4}')

假设你有一个理由cat

相关内容