"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
종료 상태만 원하므로 일반 출력을 억제하려면 이 옵션을 사용하십시오 .