powershell - Powershell - 计算.txt文件中的回车换行数
问题描述
我有一个大文本文件(从 SQL db 输出),我需要确定行数。但是,由于源 SQL 数据本身包含回车符\r
和换行符\n
(从不一起出现),因此某些行的数据跨越输出 .txt 文件中的多行。我在下面使用的 Powershell 为我提供了大于实际 SQL 行数的文件行数。所以我需要修改脚本以忽略额外的行 - 一种方法可能只是计算文件中的次数CRLF
或\r\n
发生次数(TOGETHER),这应该是实际的行数,但我不确定如何去做吧。
Get-ChildItem "." |% {$n = $_; $c = 0; Get-Content -Path $_ -ReadCount 1000 |% { $c += $_.Count }; "$n; $c"} > row_count.txt
解决方案
我刚刚了解到,Get-Content
文件中的每一行通过CR
、CRLF
和拆分和流式传输,LF
以便它可以在操作系统之间互换读取数据:
"1`r2`n3`r`n4" | Out-File .\Test.txt
(Get-Content .\Test.txt).Count
4
再次阅读问题,我可能误解了您的问题。
在任何情况下,如果您只想在特定字符组合上拆分(计数):
铬
((Get-Content -Raw .\Test.txt).Trim() -Split '\r').Count
3
如果
((Get-Content -Raw .\Test.txt).Trim() -Split '\n').Count
3
CRLF
((Get-Content -Raw .\Test.txt).Trim() -Split '\r\n').Count # or: -Split [Environment]::NewLine
2
注意删除参数.Trim()
添加的文件末尾的额外换行符(空格)的方法。Get-Content -Raw
附录
(根据对内存异常的评论进行更新)
恐怕目前没有其他选择,然后使用ReadBlock方法构建自己的StreamReader并专门在 CRLF 上拆分行。我已经为此问题打开了一个功能请求:-NewLine Parameter to customize line separator for Get-Content
获取线
解决内存异常错误的一种可能方法:
function Get-Lines {
[CmdletBinding()][OutputType([string])] param(
[Parameter(ValueFromPipeLine = $True)][string] $Filename,
[String] $NewLine = [Environment]::NewLine
)
Begin {
[Char[]] $Buffer = new-object Char[] 10
$Reader = New-Object -TypeName System.IO.StreamReader -ArgumentList (Get-Item($Filename))
$Rest = '' # Note that a multiple character newline (as CRLF) could be split at the end of the buffer
}
Process {
While ($True) {
$Length = $Reader.ReadBlock($Buffer, 0, $Buffer.Length)
if (!$length) { Break }
$Split = ($Rest + [string]::new($Buffer[0..($Length - 1)])) -Split $NewLine
If ($Split.Count -gt 1) { $Split[0..($Split.Count - 2)] }
$Rest = $Split[-1]
}
}
End {
$Rest
}
}
用法
为防止内存异常,请务必不要将结果分配给变量或使用方括号,因为这将停止 PowerShell PowerShell 管道并将所有内容存储在内存中。
$Count = 0
Get-Lines .\Test.txt | ForEach-Object { $Count++ }
$Count
推荐阅读
- c# - 如何使用离线同步功能为移动应用程序设置后端
- python-3.x - 替换python字符串中的相同字符但替换值不同
- python - dns.name.EmptyLabel:DNS 标签为空。导入 socketio 或 eventlet 时
- python - Python/Pandas 循环时间序列
- python - 在函数文档字符串的 Raises 部分中,是否也应列出间接引发的异常?
- java - Android将音乐文件夹路径从SD卡更改为原始文件
- python - 如何在 python 中获取两位数(00.00.00)的小时格式?
- python - 在 pyqtgraph 中使用日期或时间
- python - 如何为 Python 创建这个正则表达式?
- html - 移动时围绕使用 Jquery,insertAfter() 有效,但 insertBefore() 无效