Ich möchte cat
eine Datei erstellen und die Zeilennummer jeder ausgegebenen Zeile ausgeben.
In PowerShell wird jedoch cat
ein Array ausgegeben. Daher stellt sich effektiv die Frage: Wie drucke ich den Index jedes Elements, während es an die Konsole ausgegeben wird ...?
Ich habe so etwas versucht:
$k = cat foo.js
$k | foreach { $index = $k.IndexOf($_) + 1; write "$index : $_"; } | more
Es gab mir einige seltsame Ergebnisse. Einige Zeilennummern werden wiederholt. Was ist ein eleganter und zuverlässigerer Weg, dies zu tun?
linux
command-line
bash
powershell
cat
deostroll
quelle
quelle
cat -n
ist eigentlich kein Teil von bash - es ist Teil voncat
, was ein separates Programm ist - und es gibt keinen Grund zu der Annahme, dass jeder Computer mit installiertem bash es unterstützt.Antworten:
Ich möchte eine Datei katzen und die Zeilennummer jeder ausgegebenen Zeile ausgeben.
Verwenden Sie den folgenden Befehl:
Wie in den Kommentaren ausgeführt:
write-output
stattdessen zu verwenden,write-host
da dies eine weitere Verarbeitung der Ausgabe ermöglicht.echo
ist ein Alias fürwrite-output
Der obige Befehl lautet also:
Beispielausgabe:
Beispielausgabe von Cygwin
cat -n
zum Vergleich:quelle
Write-Host...
zu"{0,5} {1}" -f $counter,$_
(und ich kann immer noch nicht die Backticks Arbeit richtig in backticked Text bekommen ...)echo
Aliase zu verwendenWrite-Output
.Write-Host
ist besonders. Es ist wie direkt zu schreiben/dev/tty
.Sie missbrauchen möglicherweise Select-String dafür:
Beispielausgabe:
quelle
IndexOf()
stimmt mit dem ersten Auftreten des Werts überein , sodass Ihre doppelten Zeilennummern unter Verwendung Ihres Originalcodes bedeuten, dass Sie mehrere Zeilen in der Datei haben, die identisch sind. Versuche Folgendes:quelle
Alles, woran Sie an der Eingabeaufforderung lange denken müssen, ist nicht elegant. Eleganz wäre also, genau das zu bekommen, was Sie brauchen, es in ein Skript zu schreiben und das Skript bei Bedarf aufzurufen. Um genau dieses Problem eleganter und kraftvoller zu lösen, als ich es selbst könnte, habe ich hier das Jeffrey Hicks-Skript verwendet: http://jdhitsolutions.com/blog/scripting/445/more-fun-with-get-numberedcontent/
Beispiel: Get-NumberedContent. \ README.txt Ausgabebeispiel:
Skript unten für den Fall, dass der Link jemals fehlschlägt:
quelle
Ähnlich wie der Code von DavidPostill, jedoch mit der rechtsbündigen Nummer wie cat -n
Oder mit dem gleichen Ergebnis:
Beispielausgabe:
quelle
cat
in PowerShell ist eigentlich ein Alias fürGet-Content
. Sie können dies von sehenGet-Alias cat
. Viele der einfachen nix-Befehle gaben PS-Entsprechungen an, um Benutzern den Einstieg in PowerShell zu erleichtern. Sie sind keine perfekten Spiegel, aber sie versuchen es.Es ist auch nicht erforderlich, ausgefallene Fußarbeit mit
Get-Content
der Ausgabe zu machen, um die Zeilennummern zu berechnen. Das erledigt das Cmdlet bereits für Sie.Zugegeben, die Ausgabe ist nicht perfekt und linksbündig, aber Sie können dies beheben, indem Sie Ihre eigenen Funktionen und Cmdlets rollen. PowerShell arbeitet mit maximaler Leistung mit Objekten. Wenn Sie Ihre Datei also in etwas anderes verwandeln, sieht dies folgendermaßen aus:
Denken Sie daran , es gibt viele weitere Möglichkeiten , um Hilfe wie
-Head
,-Tail
,-TotalCount
usw. , die Funktionalität dieser scheinbar einfachen Cmdlets hinzufügen können.Obwohl ich sicher bin, dass das nicht genau das ist, was Sie sich erhofft haben. Der Punkt ist,
Get-Content
dass die Zeilennummern bereits bekannt sind, sodass keine Zählungen oder ähnliches erforderlich sind.quelle
Oder vielleicht das Folgende, um eine Zeile (in der PowerShell-Ausgabe) pro Zeile (in der Datei) zu garantieren.
quelle