Tôi muốn đọc từng dòng một tệp trong PowerShell. Cụ thể, tôi muốn lặp qua tệp, lưu trữ từng dòng trong một biến trong vòng lặp và thực hiện một số xử lý trên dòng.
Tôi biết tương đương Bash:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
Không có nhiều tài liệu về vòng lặp PowerShell.
process
khối và phun ra một đối tượng khác trên mỗi dòng vào đường ống, thì hàm đó là vấn đề. Mọi vấn đề với việc tải toàn bộ nội dung vào bộ nhớ không phải do lỗi của Get-Content
.
foreach($line in Get-Content .\file.txt)
Nó sẽ tải toàn bộ tệp vào bộ nhớ trước khi bắt đầu lặp lại. Nếu bạn không tin tôi, hãy lấy một tệp nhật ký 1GB và thử nó.
Get-Content .\file.txt | ForEach-Object -Process {}
là đường ống nhận biết và sẽ không tải toàn bộ tệp vào bộ nhớ. Theo mặc định, Get-Content sẽ chuyển từng dòng một trong đường dẫn.
Get-Content
tải toàn bộ tệp vào bộ nhớ cùng một lúc, việc này sẽ bị lỗi hoặc bị đóng băng trên các tệp lớn.