Powershell Tail und Head vereint
Ausgabe der letzten und der ersten n-Zeilen in einemBefehl
In Unix/Linux Derivaten sind die Befehle tail und Head oft benutzte Werkzeuge zur Ausgabe der ersten/letzten Zeilen einer Datei oder der Ergebnisse eines Befehls. Direkt kombinieren kann man sie nicht. Hier sind sed/awk und andere Werkzeuge und Lösungen gefordert. Powershell bietet eine sehr effiziente Lösung.
Der erste Ansatz wäre die Ausgabe mit Select -Last und Select -First zu behandeln.
Get-ChildItem somefolder | Select -First 10
Get-ChildItem somefolder | Select -Last 10
Das geht aber nicht in einem Befehl (oder nur mit einer zu schreibenden Funktion). Damit haben wir das gleiche Problem wie mit head und tail in Unix.
Per Get-ChildItem und einem auf die Ausgabe angewendetem Sort Befehl erhält man eine Liste. Diese Ausgabe kann man als Array / Liste von Zeichenketten interpretieren und einzelne Elemente mit einen nachfolgenden Index in eckigen Klammern auswählen.
(Get-Content hashes.csv)[1]
Der “Trick” besteht darin, dass eine solche Powershell Liste auch einen Bereich adressieren kann und dieser Bereich “überlaufen” darf und dann von vorn anfängt. [0..10] gibt die ersten 11 Elemente aus. [10..-1] gibt alle Zeilen ab der 11. Zeile bis zur letzten (-1) aus.
[-10..10] gibt die letzten 10 und die ersten 11 Zeilen aus (da 0 die erste Zeile ist). Das Ergebnis sieht etwas ungewöhnlich aus, da zuersrt die letzten Zeilen ausgegeben werden:
(gci $folder *jpg |Sort-Object LastWriteTime)[-10..10]
Dieses Verfahren funktioniert für alle Listausgaben, wie Get-ChildIten, Get-Content, Get-Prozess und so weiter.