Pada kluster berbasis antrian, Antrian pekerjaan yang tertunda ditampilkan dari sebuah perintah, katakanlah showqueue
.
Perintah mengembalikan, dalam kolom, daftar data yang masuk akal seperti nama, dll, tetapi kolom / data tidak terlalu penting untuk pertanyaan.
Saya suka menggunakan utilitas watch
seperti watch showqueue
di kali (dengan alias alias watch="watch "
untuk memaksa alias perluasan perintah saya untuk menonton). Ada data berharga (Menjalankan pekerjaan), di beberapa baris pertama, lalu pekerjaan yang tertunda, dll, dan beberapa ringkasan berharga di akhir.
Namun, kadang-kadang output showqueue keluar dari layar (Luar biasa, saya tahu)! Idealnya, saya ingin beberapa cara untuk dapat melihat awal dan akhir file pada saat yang sama.
Yang terbaik yang saya miliki sejauh ini adalah:, showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2
dan menggunakan watch
alias itu.
Adakah yang tahu tentang sesuatu yang sedikit lebih fleksibel atau utilitas tunggal? Solusi saya menjadi sedikit nastier dengan loop bash untuk membuat "..." istirahat multiline, itu tidak adaptif untuk mengubah ukuran jendela terminal sama sekali, dan saya yakin ada lebih banyak yang saya lewatkan.
Ada saran?
sumber
seq 30 | (head && tail)
misalnya).Jawaban:
Apakah Anda ingin melakukan sesuatu seperti yang berikut ini? Menunjukkan output dari kepala dan ekor.
sumber
head
dapat membaca lebih dari 10 baris dan tidak meninggalkan apa pun untuktail
dibaca. Utilitas tidak seharusnya melakukan itu dan saya percaya bahwa alat GNU berperilaku baik dalam hal ini. Gunakanhead; echo '...'; tail
untuk mendapatkan titik-titik di sana juga.head
tidak membaca berlebihan? (sama pada Mac, tampaknya dibaca oleh blok)head
implementasi yang saya tahu yang membaca satu byte pada satu waktu untuk menghindari membaca melewati baris ke-10 adalahhead
builtin ksh93 .Menggunakan pendekatan yang sama seperti Anda, menggunakan file sementara, tetapi melakukannya sedikit lebih pendek:
Ini tidak akan menderita dari masalah yang sama seperti yang dibahas di bawah jawaban lain , tetapi mungkin akan menunjukkan baris yang sama dua kali jika output lebih pendek dari 40 baris.
sumber
tee
untuk membiarkan output langsung masuk kehead
dan hanya menggunakan output yang disimpan untuktail
.solusi awk untuk jumlah garis sewenang-wenang yang ditunjukkan dari kepala dan ekor (ubah
n=3
untuk mengatur jumlah):Seperti yang tertulis, bagian kepala dan ekor tidak akan tumpang tindih, bahkan jika input lebih pendek dari
2*n
garis.Dalam beberapa implementasi awk, menggunakan
for (x in a) print a[x];
diEND
bagian juga bekerja. Tetapi secara umum, itu tidak dijamin untuk mengembalikan entri array dalam urutan yang benar, dan tidak dalam mis. Mawk.sumber
m
jumlah baris dalam file, danm < 2n
, itu akan mencetak2n - m
baris kosong. Lihat juga di sini ;-).for (x in a)
akan beralih hanya dalam GNU awk ; jika Anda berpikir itu berfungsimawk
juga, uji dengan> 10 nilai.x in a
itu tidak benar. Tetap sekarang, terima kasih. Ada juga jawaban awk lain dalam pertanyaan yang dikaitkan dengan Stéphane. Saya suka trik modulo!Anda dapat menggunakan skrip awk sederhana. Menambahkan buffer lingkaran di sana n = 3 untuk 3 baris terakhir
Namun setelah pembaruannya tidak sederhana lagi,
sumber
NR==1
keNR <= 10
(atau sesuatu), dan kemudian mengumpulkan garis menjadi buffer (melingkar?) Yang nanti Anda hasilkan diEND
blok.