В кластерах на основе очередей очередь ожидающих заданий отображается из команды, скажем 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, чтобы сделать разрыв "..." многоуровневым, оно вообще не приспособлено для изменения размера окна терминала, и я уверен, что есть еще кое-что, что я пропустил.
Какие-либо предложения?
источник
seq 30 | (head && tail)
например).Ответы:
Вы хотите сделать что-то вроде следующего? Показывает вывод из головы и хвоста.
источник
head
могут читать более 10 строк и ничего неtail
читать. Утилита не должна этого делать, и я считаю, что инструменты GNU хорошо себя ведут в этом отношении. Используйте,head; echo '...'; tail
чтобы получить точки там.head
не перечитывать? (то же самое на Mac, кажется, читает по блокам)head
известная мне реализация, которая читает по одному байту за раз, чтобы избежать чтения после 10-го символа новой строки, - этоhead
встроенная функция ksh93 .Используя тот же подход, что и вы, используя временный файл, но делая его немного короче:
Это не будет страдать от тех же проблем, которые обсуждались в другом ответе , но , возможно, будет показывать одни и те же строки дважды, если результат будет короче 40 строк.
источник
tee
чтобы позволить выводу идти прямоhead
и использовать только сохраненный вывод дляtail
.Решение awk для произвольного числа строк, показанных от головы и хвоста (измените,
n=3
чтобы установить количество):Как написано, части головы и хвоста не будут перекрываться, даже если ввод короче
2*n
линий.В некоторых реализациях awk использование
for (x in a) print a[x];
вEND
части также работает. Но в целом, не гарантируется возвращение записей массива в правильном порядке, и это не происходит, например, в mawk.источник
m
это число строк в файле, иm < 2n
, это будет печатать2n - m
пустые строки. Также посмотрите здесь ;-).for (x in a)
будет повторяться по порядку только в GNU awk ; если вы думаете, что онmawk
тоже работает , протестируйте с> 10 значениями.x in a
это неправильно. Исправлено сейчас, спасибо. В ответе на вопрос Стефана также есть другой ответ на awk . Мне нравится трюк по модулю, хотя!Вы можете использовать простой скрипт на awk. Добавлен круговой буфер там n = 3 для последних 3 строк
После обновления это не так просто,
источник
NR==1
чтобыNR <= 10
(или что - то), а затем собирать строки в (циркулярный?) Буфер , который вы позже выход вEND
блоке.