Как я могу печатать или отображать только слова из текстового файла одновременно. Когда я запускаю свой скрипт, он должен отображать только каждое слово из текстового файла одно за другим, но отображать только это слово.
Это то, что я сделал, но оно отображает каждое слово в отдельной строке, но показывает все из них:
FS= Я хочу, чтобы вывод выглядел примерно так:
root@matrix:~> first word ---> this word disappear when second is displayed
root@matrix:~> second word ---> this disappear when third is displayed
root@matrix:~> third word ---> this disappear when fourth is displayed and continues like this to the end of the file!
\n'
for j in `cat read`
do
echo "$j"
done
Я хочу, чтобы вывод выглядел примерно так:
root@matrix:~> first word ---> this word disappear when second is displayed
root@matrix:~> second word ---> this disappear when third is displayed
root@matrix:~> third word ---> this disappear when fourth is displayed and continues like this to the end of the file!
Можно использовать sleep
и clear
команды в Вашем сценарии как следующее:
for word in $(< read)
do
echo "$word"
sleep 1
clear
done
sleep
команда делает задержку указанного количества времени (в секундах). С sleep 1
задержка была бы в течение 1 секунды. Можно измениться для большего количества задержки путем постепенного увеличения второго параметра или для задержки меньше чем 1 второго деления это к низким единицам; Как sleep .1
для 1/10 второй задержки или sleep .001
для 1/1000 второй задержки и и т.д.
clear
управляйте очищают терминальный экран.
awk
команда:awk '{i=1; while(i<=NF){ print $((i++)); system("sleep 1; clear") }}' read
В awk
, NF
указывает общее количество полей в текущей входной записи/строке, таким образом, при помощи переменной как счетчик (i
) и цикличное выполнение по нему, мы печатаем всех их от 1-го положения в конец их (NF
). Затем при помощи system("sleep 1; clear")
часть, мы говорим awk
к вызову системы управляет ко сну в течение 1 секунды и очистке экрана.
В вышеупомянутом мы отображаем входной файл как пословно. Если Вы собираетесь отобразить его, линию за линией добавляют IFS=$'\n'
в сценарии как:
IFS=$'\n'
for word in $(< read)
do
echo "$word"
sleep 1
clear
done
И изменение awk
команда как:
awk '{ $0; system("sleep 1; clear") }1' read
$0
указывает текущую строку. и 1
подряд включает значение по умолчанию awk
команда печати. С bash
, я сделал бы:
while IFS= При помощи возврата каретки (\r
) вместо перевода строки (\n
), можно перезаписать текущую строку. -${COLUMNS}
клавиатуры вывод с пробелами так, чтобы предыдущие строки были полностью перезаписаны.
Для решения на слово, я думаю, что двойной цикл необходим:
while read -ra line
do
for word in "${line[@]}"
do
printf "%-${COLUMNS}s\r" "$word"
sleep 1
done
done < file
\n' read -r line
do
printf "%-${COLUMNS}s\r" "$line"
sleep 1
done < file
При помощи возврата каретки (\r
) вместо перевода строки (\n
), можно перезаписать текущую строку. -${COLUMNS}
клавиатуры вывод с пробелами так, чтобы предыдущие строки были полностью перезаписаны.
Для решения на слово, я думаю, что двойной цикл необходим:
while read -ra line
do
for word in "${line[@]}"
do
printf "%-${COLUMNS}s\r" "$word"
sleep 1
done
done < file