awk 명령은 첫 번째 줄의 첫 번째 필드와 첫 번째 줄의 두 번째 필드의 상태를 확인합니다.

awk 명령은 첫 번째 줄의 첫 번째 필드와 첫 번째 줄의 두 번째 필드의 상태를 확인합니다.

아래와 같이 쉼표로 구분된 필드가 있습니다. 이는 명령의 출력입니다 nodestat.

node mode  : produce ,  modify time: 2014-11-22 04:23:28
node status: active  ,  modify time: 2014-11-22 04:23:28

다음 조건이 모두 발생하면 "OK"를 인쇄하고 싶습니다.

  1. "노드 모드: 생성"(첫 번째 행, 첫 번째 열) 및
  2. "노드 상태: 활성"(두 번째 행, 첫 번째 열) 및
  3. 수정 시간이 어제 시간보다 짧습니다. (첫 번째 행, 두 번째 열)

그렇지 않으면 "NOT OK"를 인쇄합니다.

답변1

awk이를 위해 다음과 같은 짧은 스크립트를 작성했습니다 .

nodestat |awk -v Yday="$(date -d "$(date -d '-1day' '+%Y-%m-%d 00:00:00')" +%s)" -F"[ ,]" \
   '{ Mdate=$(NF-1)" "$NF; 
      dMepoch="date -d""\""Mdate"\""" +%s";
      dMepoch |getline Mdate; close(dMepoch)
    }
    $0 ~ /node mode  : produce/ && NR==1 && Mdate<Yday{tru++;next}
    {print($0 ~ /node status: active/ && NR==2 && Mdate<Yday && tru)?"OK":"NOT OK";exit
}'
OK

설명하다:

  • 먼저 $(date -d "$(date -d '-1day' '+%Y-%m-%d 00:00:00')" +%s)어제 날짜를 이 형식으로 가져온 다음 이를 다음으로 변환합니다.Y-m-d 00:00:00$(date -d '-1day' '+%Y-%m-%d 00:00:00')에포크 시간라는 변수에 할당됩니다 Yday.
  • 에서는 F"[ ,]"필드 구분자를 다음과 같이 정의합니다.반점그리고공간.
  • 에서는 Mdate=$(NF-1)" "$NF;필드 구분 기호를 기반으로 마지막 두 필드를 다음과 같은 변수 Mdate만 포함하는 변수에 넣습니다.날짜, 그 다음에;
  • 에서는 dMepoch="date -d""\""Mdate"\""" +%s";쉘 명령을 로 설정하고 date -d""\""Mdate"\""" +%s변수에 할당한 다음 이전 명령을 호출합니다 dMepoch.dMepoch |getline Mdate;파이프에서 getline 사용하기그런 다음 Mdate전달된 값의 시대를 가져와 동일한 변수에 저장합니다.Mdate
  • 마지막으로 우리가 연 명령을 닫아야 하므로 다음을 사용합니다.close(dMepoch)닫아.

이제 어제 날짜와 각 행이 읽을 에포크의 각 행에 대한 날짜가 있습니다 nodestat. awk나중에

  • $0 ~ /node mode : produce/ && NR==1 && Mdate<Yday{tru++;next}NR==1, 첫 번째 행 이고 수정 시간(에 저장된 에포크 Mdate)이 어제 날짜(에포크 Yday) 보다 이전 인지 확인하고 행에 해당 날짜가 포함되어 있는지 확인한 node mode : produce다음 플래그를 설정 하고 행을 실행 tru++합니다 .awknext

  • 두 번째 줄 에서는 print($0 ~ /node status: active/ && NR==2 && Mdate<Yday && tru)?"OK":"NOT OK";exit동일한 수정 시간을 차단 NR==2하고 일치 항목을 포함하고 tru!=0첫 번째 줄에서 모든 조건이 충족되면 "OK"를 인쇄하고 그렇지 않으면 삼항 조건을 통해 "NOT OK"를 인쇄합니다 print (condition)?if_true:if_false. exit첫 번째 줄이 조건을 충족하지 않을 때마다 여기에서 사용되며 처음 실행 시 awk"NOT OK"를 인쇄하고 종료합니다. 이렇게 하면 "NOT OK"가 반복되는 것을 방지할 수 있습니다.

관련 정보