从文本文件一次只打印一行
如何一次只打印或显示文本文件中的单词。 当我运行我的脚本时,它应该只显示文本文件中的每个单词,但只显示该单词。
这就是我所做的,但它会在单独的行中显示每个单词,但它显示了所有单词:
FS=$'\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
调用系统命令hibernate1秒并清除屏幕。
在上面,我们将逐字显示输入文件。 如果要逐行显示,请在脚本中添加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
on end启用默认awk
的print命令。
有了bash
,我会这样做:
while IFS=$'\n' read -r line do printf "%-${COLUMNS}s\r" "$line" sleep 1 done < file
通过使用回车符( \r
)而不是换行符( \n
),可以覆盖当前行。 -${COLUMNS}
用空格-${COLUMNS}
输出,以便先前的行被完全覆盖。
对于单字解决方案,我认为需要双循环:
while read -ra line do for word in "${line[@]}" do printf "%-${COLUMNS}s\r" "$word" sleep 1 done done < file