
キューベースのクラスタでは、保留中のジョブのキューがコマンドとともに表示されます(例:)showqueue
。
このコマンドは、名前などの列の合理的なデータのリストを返しますが、列/データは質問にとって重要ではありません。
watch
私は時々このユーティリティを使うのが好きですwatch showqueue
(別名を使ってalias watch="watch "
私のコマンドの別名拡張を強制的に監視します)。最初の数行には重要なデータ(実行中のジョブ)、保留中のジョブなどがあり、最後にいくつかの重要な要約があります。
しかし、時々showqueueの出力が画面から外れることがあります(信じられません。私も知っています)!理想的には、ファイルの始まりと終わりの両方を見る方法があります。
これまでに私が持っていたものの中で最高は:showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2
であり、watch
エイリアスを使用することです。
より柔軟でシンプルなユーティリティを知っている人はいますか?私の解決策は少し悪いことが判明しました。 bashループは「...」を複数行にして、ターミナルウィンドウのサイズ変更にはまったく適応しておらず、もっと見逃していたでしょう。
どんな提案がありますか?
答え1
次のようなことをしますか?頭と尾の出力を表示します。
$ showqueue | (head && tail)
答え2
一時ファイルを使用して同じ方法を使用しますが、少し短いです。
showqueue >/tmp/q.out; head -n 20 /tmp/q.out; echo '...'; tail -n 20 /tmp/q.out
これは、議論された同じ問題のために困難を経験しません。他の答えで、しかし会議出力が40行未満の場合、同じ行が2回表示されることがあります。
答え3
頭と尾に必要な数の行を表示するawkソリューション(n=3
セット番号の変更):
$ seq 99999 | awk -v n=3 'NR <= n; NR > n { a[NR] = $0; delete a[NR-n]; }
END { print "..."; for (i = NR-n+1; i <= NR; i++) if (i in a) print a[i]; }'
1
2
3
...
99997
99998
99999
書かれたように頭と尾いいえ入力が2*n
ラインより短い場合でも重なります。
一部のawk実装では、for (x in a) print a[x];
inEND
部分を使用することも可能です。しかし、通常、配列項目が正しい順序で返されるという保証はありません。たとえば、mawkの場合はそうではありません。
答え4
単純な awk スクリプトを使用できます。最後の3行にn = 3の循環バッファを追加しました。
awk 'NR<=n {print $0} { A[NR%n]=$0 } END { for (i=1; i<=n; ++i) if (NR+i>2*n)print A[(NR+i)%n] }' n=3 < <( seq 10 )
更新後はもう簡単ではありません。