
私のファイル名に数字の増大サフィックスがあります。
filename01
filename02
.
.
.
filename250
次のcatコマンドを実行する前に一時停止できるコマンドを実行できるようにしたいです。
cat filename01
wait (1sec)
cat filename02
wait (1sec)
.
.
.
.
cat filename250
助けてください。私の最後のファイル名(filename250)はより高いサフィックスを持つことができます。変数設定を使用してforループを実行できるか共有する場合は、より良い提案を提供してください。ありがとうございます!
答え1
これらのファイルを数字で並べ替えるには、代わりに使用することをおzsh
勧めしますbash
。n
数値グローバルソート グローバル予選そのような理由で。 glob拡張filename250
など、これがない場合は、デフォルトのglobソート順序が語彙であるため、および間でソートされfilename*
ます。filename25
filename26
for file in filename<1-250>(Nn); do
cat < $file
sleep 1
done
(N
一致するファイルがない場合は、エラーを防ぐためにulllglob修飾子を使用することもできます。)
任意の数字(1つ以上のASCII 10進数シーケンス)<1-250>
と一致するか、すべての項目と一致するものに置き換えます。<->
*
各ファイル間で1秒待たずに毎秒1つのファイルをキャプチャします(ファイルにかかる時間もcat
考慮してください)。cat
typeset -F SECONDS=0
n=0
for file in filename<1-250>(Nn); do
cat < $file
(( SECONDS >= ++n )) || sleep $(( n - SECONDS ))
done
(これはaがsleep
浮動小数点数を取ることができると仮定します)。
bash
最新のGNUシステムでも同様のことができます。
shopt -s nullglob extglob
print0() { [ "$#" -eq 0 ] || printf '%s\0' "$@"; }
readarray -td '' files <(
print0 filename+([0123456789]) |
LC_ALL=C sort -zV
)
for file in "${files[@]}"; do
cat < "$file"
sleep 1
done
私たちは、C言語環境でsort
GNUバージョンソートを使用してzshのumericglobsort glob修飾子と同様のことをV
行います。n
(bash
kshフレーバーもありますが、ksh93やzshとは異なりアンカーポイントには$SECONDS
なりません)typeset
F