テキストファイルからWordのみを一度に印刷または表示するにはどうすればよいですか。スクリプトを実行すると、テキストファイルの各Wordが1つずつ表示されますが、そのWordのみが表示されます。
これは私がやったことですが、各Wordを別々の行に表示しますが、すべてを表示します:
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秒間になります。 2番目のパラメーターをインクリメントするか、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
)およびそれをループして、それらのすべてを最初の位置から最後まで印刷します(NF
)。次に、system("sleep 1; clear")
部分を使用して、awk
にシステムコマンドを呼び出して1秒間スリープさせ、画面をクリアするように指示しています。
上記では、入力ファイルをWord by Wordとして表示しています。行ごとに表示する場合は、次のようにスクリプトに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
のprintコマンドを有効にします。bash
を使用して、次のことを行います。
while IFS=$'\n' read -r line
do
printf "%-${COLUMNS}s\r" "$line"
sleep 1
done < file
改行(\r
)の代わりに復帰(\n
)を使用すると、現在の行を上書きできます。 -${COLUMNS}
は、前の行が完全に上書きされるように、出力にスペースを埋め込みます。
Wordごとのソリューションでは、二重ループが必要だと思います。
while read -ra line
do
for Word in "${line[@]}"
do
printf "%-${COLUMNS}s\r" "$Word"
sleep 1
done
done < file