In warteschlangenbasierten Clustern wird die Warteschlange ausstehender Jobs beispielsweise über einen Befehl angezeigt showqueue
.
Der Befehl gibt in Spalten eine Liste vernünftiger Daten wie Namen usw. zurück, aber die Spalten / Daten sind für die Frage nicht wirklich wichtig.
Ich benutze das Dienstprogramm manchmal watch
gerne watch showqueue
(mit dem Alias alias watch="watch "
, um die Alias-Erweiterung meines Befehls zum Beobachten zu erzwingen). In den ersten Zeilen befinden sich wertvolle Daten (Ausführen von Jobs), dann ausstehende Jobs usw. und am Ende einige wertvolle Zusammenfassungen.
Manchmal geht die Ausgabe von Showqueue jedoch vom Bildschirm (Unglaublich, ich weiß)! Im Idealfall möchte ich auf irgendeine Weise den Anfang und das Ende der Datei gleichzeitig sehen können.
Das Beste, was ich bisher habe, ist: showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2
und unter Verwendung watch
eines Alias davon.
Kennt jemand etwas, das etwas flexibler oder einfacher ist? Meine Lösung wird mit Bash-Schleifen etwas unangenehmer, damit die "..." - Unterbrechung mehrzeilig wird. Sie ist überhaupt nicht anpassbar, um die Größe des Terminalfensters zu ändern, und ich bin sicher, dass ich noch mehr verpasst habe.
Irgendwelche Vorschläge?
quelle
seq 30 | (head && tail)
beispielsweise).Antworten:
Möchten Sie so etwas wie das Folgende tun? Zeigt die Ausgabe von Kopf und Schwanz an.
quelle
head
lesen möglicherweise mehr als 10 Zeilen und lassen nichtstail
zum Lesen übrig . Das Dienstprogramm wird nicht angenommen , das zu tun , und ich glaube , dass die GNU - Tools sind in dieser Hinsicht verhalten. Verwenden Siehead; echo '...'; tail
, um die Punkte auch dort zu bekommen.head
, nicht zu viel zu lesen? (gleich auf Mac, scheint es durch die Blöcke zu lesen)head
mir bekannte Implementierung, die jeweils ein Byte liest, um zu vermeiden, dass über die 10. Zeilenumbruch hinaus gelesen wird, ist diehead
integrierte Version von ksh93 .Verwenden Sie den gleichen Ansatz wie Sie, verwenden Sie eine temporäre Datei, aber etwas kürzer:
Dies würde nicht von den gleichen Problemen leiden , wie diskutiert unter einer anderen Antwort , aber würde möglicherweise die gleichen Zeilen zweimal zeigen , wenn die Ausgabe kürzer als 40 Zeilen sind.
quelle
tee
, um die Ausgabe direkt zu verwenden,head
und nur der gespeicherten Ausgabe fürtail
.awk-Lösung für eine beliebige Anzahl von Linien, die vom Kopf und vom Schwanz angezeigt werden (ändern
n=3
, um die Menge einzustellen):Wie geschrieben, überlappen sich die Kopf- und Schwanzteile nicht , selbst wenn die Eingabe kürzer als die
2*n
Zeilen ist.In einigen awk-Implementierungen funktioniert auch die Verwendung
for (x in a) print a[x];
imEND
Teil. Im Allgemeinen wird jedoch nicht garantiert, dass die Array-Einträge in der richtigen Reihenfolge zurückgegeben werden, und dies ist beispielsweise nicht der Fall.quelle
m
ist die Anzahl der Zeilen in der Datei, undm < 2n
, werden2n - m
leere Zeilen gedruckt . Schauen Sie auch hier ;-).for (x in a)
wird in der Reihenfolge nur in GNU awk iterieren ; Wenn Sie denken, dass es auch funktioniertmawk
, testen Sie mit> 10 Werten.x in a
wurde , dass es nicht richtig war. Jetzt behoben, danke. Es gibt auch eine andere Antwort in der Frage, mit der Stéphane verbunden ist. Ich mag den Modulo-Trick!Sie können ein einfaches awk-Skript verwenden. Der hinzugefügte Kreispuffer dort n = 3 gilt für die letzten 3 Zeilen
Nach dem Update ist es allerdings nicht mehr einfach,
quelle
NR==1
zuNR <= 10
(oder etwas) wechseln und dann Zeilen in einem (kreisförmigen?) Puffer sammeln, den Sie später imEND
Block ausgeben .