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

Has*_*ima 6 command-line bash scripts text-processing

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

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

FS=$'\n'      
for j in `cat read`
do
    echo "$j"
done
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像这样:

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!
Run Code Online (Sandbox Code Playgroud)

αғs*_*нιη 5

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

for word in $(< read)
do
    echo "$word"
    sleep 1
    clear
done
Run Code Online (Sandbox Code Playgroud)

解释:

所述sleep用于在指定的时间量指令化妆延迟(以秒计)。随着sleep 1延迟为1秒。您可以通过增加第二个参数来改变更多的时间延迟,或者延迟小于 1 秒将其划分为低单位;比如sleep .11/10 秒延迟或sleep .0011/1000 秒延迟等。

clear命令清除终端屏幕。

更好的是,您可以通过以下awk命令执行此操作:

awk '{i=1; while(i<=NF){ print $((i++)); system("sleep 1; clear") }}' read
Run Code Online (Sandbox Code Playgroud)

解释:

在 中awkNF指定当前输入记录/行中的字段总数,因此通过使用变量作为计数器 ( i) 并循环遍历它,我们将从第一个位置到它们的末尾 ( NF)打印所有字段。然后通过使用该system("sleep 1; clear")部分,我们告诉awk调用系统命令休眠 1 秒并清除屏幕。


在上面,我们将输入文件逐字显示。如果要逐行显示它IFS=$'\n',请在脚本中添加,例如:

IFS=$'\n'
for word in $(< read)
do
    echo "$word"
    sleep 1
    clear
done
Run Code Online (Sandbox Code Playgroud)

并更改awk命令,如:

awk '{ $0; system("sleep 1; clear") }1' read
Run Code Online (Sandbox Code Playgroud)
  • $0指定当前行。与1上年底启用默认awk打印命令。