루프를 사용하여 주어진 시간에 특정 수의 단어나 문자를 표시하려면 어떻게 해야 합니까? 1분에 120개의 단어를 표시하고 싶다고 가정해 보겠습니다.
내가 시도한 루프는 다음과 같습니다.
FS=$'\n'
for j in `cat $1`;
do
echo "$j";
sleep 1;
clear;
done
이 작업은 1초밖에 걸리지 않지만 1분에 120단어 정도는 작동하지 않습니다. 어떻게 해야 하나요?
답변1
sleep 명령은 지정된 시간(초) 동안 지연됩니다. 지연 sleep 1
시간은 1초(초당 한 단어)입니다. 두 번째 매개변수를 증가시켜 더 많은 시간 지연을 변경하거나 1초 미만의 지연을 위해 낮은 단위로 나눌 수 있습니다. sleep .1
1/10초 지연 또는 sleep .001
1/1000초 지연 등과 같습니다 .
따라서 분당 120단어를 표시하려면 다음을 사용할 수 있습니다. sleep .5
즉, 각 단어를 0.5초에 표시한다는 의미이며 이는 분당 120단어를 의미합니다.
최종 스크립트는 다음과 같습니다.
#!/bin/bash
for word in $(< "$2");
do
echo "$word";
sleep $1;
clear;
done
이름이 지정된 스크립트를 저장 scriptname.sh
하고 실행 파일로 만든 chmod +x scriptname.sh
다음 다음을 사용하여 스크립트를 실행합니다../scriptname.sh .5 infile
답변2
while read line ; do . . .; done
Bash에서 구조를 사용하여 파일을 한 줄씩 읽는 것이 자주 사용됩니다 . 입력 파일에 한 줄에 하나의 단어가 있다고 가정하면 다음과 같이 쉽게 수행할 수 있습니다.
while read line; do printf "%s\n" "$line" ; sleep 3; done < input.txt
Python은 이 작업을 매우 쉽게 수행할 수 있습니다.
#!/usr/bin/env python
import sys,time
for line in sys.stdin:
print line.strip()
sys.stdout.flush()
time.sleep(1)
용법:
python print_with_delay.py <input.txt