注文する

注文する

次のような強く打つこのコマンドは入力ファイルを読み取り、各行の間に15秒間隔を置いて各行を印刷します。

IFS=$'\n';for line in $(cat file.txt | tail -n +2); do echo $line && sleep 15; done;

ただし、各回線間の遅延時間が長いためこのコマンド実行中の入力ファイルの変更

たとえば、5行目を変更すると、コマンドは最初の3行だけを印刷できます。 30秒後にコマンドが5行目に達し、印刷時にコマンドが最初に実行されたときのファイルではなく、更新された行を表示したいと思います。


はい入力するファイル.txt

本土
アフリカ
南極
アジア
オーストラリア
ヨーロッパ北 アメリカ

アメリカ

入力ファイルに順序がありません。

修正済み入力するファイル.txt
アフリカ
南極大陸ヨーロッパ
アジア
オーストラリア
北 アメリカ

アメリカ

ベストアンサー1

ファイルを実行するたびにファイルを読み取る必要があります。以下を試してください。

num=1
while true; do
if [[ $num < $(wc -l file.txt) ]]; then
    awk "NR==$num" file.txt && let "num++"
else
    break
fi
sleep 15
done

これにより、1行が印刷され、15秒間休止状態になり、続行され、行がない場合は終了します。 NRはawkレコード番号または行番号の組み込み変数です。

おすすめ記事