从文本文件一次只打印一行

如何一次只打印或显示文本文件中的单词。 当我运行我的脚本时,它应该只显示文本文件中的每个单词,但只显示该单词。

这就是我所做的,但它会在单独的行中显示每个单词,但它显示了所有单词:

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! 

您可以在脚本中使用sleepclear命令,如下所示:

 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 

说明:

awkNF指定当前输入记录/行中的字段总数 ,因此通过使用变量作为计数器( 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启用默认awkprint命令。

有了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