Περισσότερα
Ανάγνωση αρχείου γραμμή προς γραμμή στο PowerShell
Θέλω να διαβάσω ένα αρχείο γραμμή προς γραμμή στο PowerShell. Συγκεκριμένα, θέλω να κάνω βρόχο στο αρχείο, να αποθηκεύω κάθε γραμμή σε μια μεταβλητή στο βρόχο και να κάνω κάποια επεξεργασία στη γραμμή.
Γνωρίζω το ισοδύναμο Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Δεν υπάρχει μεγάλη τεκμηρίωση για τους βρόχους του PowerShell.
80
3
Η τεκμηρίωση σχετικά με τους βρόχους στο PowerShell είναι άφθονη και ίσως να θέλετε να ελέγξετε τα ακόλουθα θέματα βοήθειας:
about_For
,about_ForEach
,about_Do
,about_While
.Μια άλλη ιδιότυπη λύση του PowerShell στο πρόβλημά σας είναι να διοχετεύσετε τις γραμμές του αρχείου κειμένου στην εντολή [
ForEach-Object
(https://docs.microsoft.com/en-gb/powershell/module/Microsoft.PowerShell.Core/ForEach-Object):Αντί για την αντιστοίχιση regex μέσα στο βρόχο, θα μπορούσατε να περάσετε τις γραμμές μέσω
Where-Object
για να φιλτράρετε μόνο αυτές που σας ενδιαφέρουν:Το
Get-Content
έχει κακή απόδοση- προσπαθεί να διαβάσει το αρχείο στη μνήμη όλα μαζί.Ο αναγνώστης αρχείων της C# (.NET) διαβάζει κάθε γραμμή μία προς μία
Καλύτερη απόδοση
Ή ελαφρώς λιγότερο αποδοτική
Η εντολή
foreach
θα είναι πιθανότατα ελαφρώς ταχύτερη από την εντολήForEach-Object
(δείτε τα σχόλια παρακάτω για περισσότερες πληροφορίες).Ο πανίσχυρος διακόπτης λειτουργεί καλά εδώ:
Έξοδος: