이 로그 파일이 포함된 스크립트(unix)를 에뮬레이터로 실행하려면 어떻게 해야 합니까? [폐쇄]

이 로그 파일이 포함된 스크립트(unix)를 에뮬레이터로 실행하려면 어떻게 해야 합니까? [폐쇄]

다음 로그가 있습니다.

30-12-2022 23:24:32 : URI: p=2&pwr=0&noipcheck
30-12-2022 23:28:43 : URI: p=2&pwr=1110&noipcheck&debug
30-12-2022 23:28:51 : URI: p=2&pwr=0&noipcheck&debug
30-12-2022 23:31:57 : URI: p=2&pwr=2.200000
30-12-2022 23:50:02 : URI: p=2&pwr=0
31-12-2022 06:59:35 : URI: p=2&pwr=3
31-12-2022 07:04:35 : URI: p=2&pwr=0
31-12-2022 10:39:31 : URI: p=2&pwr=2.900000
31-12-2022 10:53:31 : URI: p=2&pwr=1507.900000
31-12-2022 10:53:36 : URI: p=2&pwr=1326.400000
31-12-2022 10:53:41 : URI: p=2&pwr=1410.200000
31-12-2022 10:53:46 : URI: p=2&pwr=2.900000

이제 어떻게 스크립트를 작성할 수 있나요?

simulate <hostname> <mydate> <starttimestamp> <endtimestamp> <logfilename>

여기서 날짜는 필터링 <mydate> <starttimestamp> <endtimestamp>되고 URI는 를 사용하여 호출되어야 합니다 <hostname>.

sleep두 번째 줄을 미리 읽어야 시차를 알 수 있어서 만드는데 애를 먹고 있어요 .

simulate https://www.xxxx.at 31-12-2022 10:00:00 10:55:00 log.txt

유닉스 환경의 bash에서 이 작업을 수행하는 방법은 무엇입니까?

그런 다음 호출해야 하지만 로그 시간에 따라 각 호출 사이의 https://www.xxxx.at?<URI>가장 최근 시간 이후에 시간 지연이 있습니다 .<starttimestamp>

철:

     now: 
     `curl` "https://www.xxxx.at?p=2&pwr=2.900000"
     `sleep` timedifference [31-12-2022 10:53:31 - 31-12-2022 10:39:31]
     `curl` "https://www.xxxx.at?p=2&pwr=1507.900000"

      ...

     `sleep` timedifference [31-12-2022 10:53:46 - 31-12-2022 10:53:41] 
     `curl` "https://www.xxxx.at?p=2&pwr=2.900000"

답변1

이제 awk 스크립트[named ] mysim.awk에서 이 작업을 수행 할 수 있습니다.

    BEGIN { FS="- :" }
        {
        split($1,a,"[: -]")
        secs = mktime(a[3]" "a[2]" "a[1]" "a[4]" "a[5]" "a[6])
        cmd[NR] = a[11]
        t[NR] = a[6] + 60 * (a[5] + 60 * a[4])
        dt[NR] =a[3]" "a[2]" "a[1]" "a[4]" "a[5]" "a[6]
        }
    END {
        split(sdt,b,"[-: ]")
        split(edt,bb,"[-: ]")
        startsecs = mktime(b[3]" "b[2]" "b[1]" "b[4]" "b[5]" "b[6])
        endsecs   = mktime(bb[3]" "bb[2]" "bb[1]" "bb[4]" "bb[5]" "bb[6])
        print sdt"[->"startsecs"] bis "edt"[->"endsecs"]"
        for (c = 1; c <= NR-1; c++)
            {
            if ((mktime(dt[c]) >= startsecs) && (mktime(dt[c]) <= endsecs))
                {
                d = t[c+1] - t[c]
                if (d < 0) d += 86400
                h = d / 3600
                d %= 3600
                m = d / 60
                s = d % 60
                printf "sleep %02d ; %s%s \n",s,"curl \"https://xxxxx.at/sendsms.php?noresponse&noipcheck&nosms&debug&",cmd[c]"\""
                }
            }
        }

LINUX 프롬프트에서 startdatetime 및 enddatetime fe를 호출합니다.

awk -v sdt="31-12-2022 11:00:00" -v edt="31-12-2022 13:00:00" -f mysim.awk mylog.txt

또는 다음과 같이 bash 스크립트(이름이 runsimulate.sh])를 통해:

  #!/bin/bash
  # call f.e.  ./runsimulate.sh "02-01-2023 14:00:00" "02-01-2023 14:50:00" <logfilename>
  awk -f mysim.awk -v sdt="$1" -v edt="$2" $3

관련 정보