텍스트 파일의 숫자를 비교하고 조건이 충족되면 쉘 스크립트를 실행합니다.

텍스트 파일의 숫자를 비교하고 조건이 충족되면 쉘 스크립트를 실행합니다.

"5 17 42 2 87 33"과 같이 한 줄에 숫자만 포함된 텍스트 파일(스크립트로 생성)이 있습니다. 각 숫자가 50(예)인지 확인하고 숫자 중 하나라도 50보다 큰 경우 다른 쉘 스크립트를 실행하고 싶습니다. 저는 vumometer 프로그램을 사용하고 있는데 소음 수준이 높을 때 소리 인식 프로그램을 실행하는 것이 목적입니다. 그래서 저는 임계값을 결정하고 싶습니다.

답변1

input함수와 하드코딩된 파일 이름을 인수로 받아들입니다:

greaterthan() (
  threshold=$1
  set -- $(< input)
  for arg
  do
    if [ "$arg" -gt "$threshold" ]
    then
      echo execute other shell script
      break
    fi
  done
)

소스 코드를 만들거나 스크립트로 만들고 원하는 대로 이름을 지정 greaterthan 50하거나 원하는 숫자로 지정하세요.

답변2

DC를 사용할 수 있습니다.

dc -f lefile -e '
  [ c                                         # clear the stack
  ! xmessage "a number is greater than 50" &  # pop up a message
  ] sr
  [ 50 <r                                     # if a number > 50 execute macro r
  z 0 <t                                      # if stack not empty execute macro t
  ] st
  lt x
'

답변3

사용 awk:

awk '{ for(i = 1; i <= NF; i++) if($i > 50) { system("bash /other/shell/script.sh") } }' file.txt

Bash 스크립트를 사용하십시오.

#!/bin/bash

file=/path/to/file.txt

for num in $(<"$file"); do
    if ((num>50)); then
        bash /other/shell/script.sh
    fi
done

그러면 각 숫자를 반복하여 file.txt숫자가 50보다 큰지 확인한 다음 제공한 스크립트를 실행합니다. 그러나 이는 문제가 되거나 불필요할 수 있습니다. 텍스트 파일에 50보다 큰 숫자가 여러 개 있는 경우 스크립트를 여러 번 실행해야 합니까?

답변4

파일을 여러 줄로 분할하고 50보다 크거나 같은 숫자와 일치하는 줄을 검색할 수 있습니다.

fmt -w1 | egrep -q '(\d\d\d|[5-9]\d)(\..*)?' && sh other_script.sh

정규식의 첫 번째 대괄호 절은 최소한 세 자리 또는 "5"로 시작하는 두 자리를 찾습니다. 두 번째 절에서는 선택적 소수점과 접미사를 허용합니다.

-q종료 상태만 원하므로 일반 출력을 억제하려면 이 옵션을 사용하십시오 .

관련 정보