Печатать только одну строку за раз из текстового файла

Как я могу печатать или отображать только слова из текстового файла одновременно. Когда я запускаю свой скрипт, он должен отображать только каждое слово из текстового файла одно за другим, но отображать только это слово.

Это то, что я сделал, но оно отображает каждое слово в отдельной строке, но показывает все из них:

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!
6
задан 21 March 2015 в 20:15

2 ответа

Можно использовать 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команда печати.
5
ответ дан 21 March 2015 в 20:15

С 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
4
ответ дан 21 March 2015 в 20:15

Другие вопросы по тегам:

Похожие вопросы: