여러 줄 조건이 있는 경우 awk하는 방법

여러 줄 조건이 있는 경우 awk하는 방법

내 로그에 몇 가지 문제가 있으며 일치하는 조건이 있는 경우 경고가 필요합니다.

일부 로그 조건은 다음과 같습니다.

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

내 기대는 field 인 경우 다음 조건으로 경고를 보낼 $4 >= 100것입니다 .print $0curl

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.

관련 정보