powershell - Powershell行数包含大量文本文件的csv

标签 powershell csv powershell-2.0

问候光荣的同志们,

我再次需要借用您的才华,使解决方案的能力最大化。

我必须使用Powershell遍历大量文本文件(在某些情况下为20 GB)的目录,提取文件名,行数和创建日期,然后将该信息输出到csv中。

到目前为止,这是我的代码:

$fileEntries = [IO.Directory]::GetFiles("T:\frg\working"); 
foreach($fileName in $fileEntries) 
{ 
    $count = 0
    $filedate = (Get-Date).Date
    $reader = New-Object IO.StreamReader $filename
    while($reader.ReadLine() -ne $null){$count++}
    $reader.close()
    #Get-Content $filename | %{$lines++}
    [Console]::Writeline($filename+" "+$count+" "+ $filedate);

}

在获得文件创建日期之前,获取日期只是一个临时填充物。

当前输出类似于:
T:\frg\working\file1.txt 90055 03/06/2014 00:00:00
T:\frg\working\file2.txt 6419616 03/06/2014 00:00:00

但是对于我一生,我无法成功将其通过管道传输到csv。

我尝试设置具有自定义属性的对象并将其输出,但是它说管道是空的。

文件很大,无法使用Import-csv选项(将20GB导入内存会引起一些问题)。如果我可以按扩展名进行过滤,也很整洁,但是如果没有扩展名,我可以解决它。

任何指针将不胜感激,在此先感谢您。

最佳答案

试试这个:

$fileEntries = [IO.Directory]::GetFiles("T:\frg\working")

$RecordCounts = 
  foreach($fileName in $fileEntries) 
   { 
    $count = 0
    $filedate = (Get-Date).Date
    Get-Content $fileName -ReadCount 1000 |
     foreach {$count += $_.count}

   New-Object psobject -Property @{FileName = $fileName;Count = $count;FileDate = $filedate}
 }

 $RecordCounts | Export-Csv c:\somedir\RecordCounts.csv

编辑:
针对略超过1200万行的1GB文件测试3个发布的解决方案:
$testfile = 'c:\testfiles\bigfile.txt'

'Get-Content | Measure-Object'
(measure-command {
Get-Content $testfile |
  Measure-Object -Line | select -expand Lines 
}).TotalSeconds
''

'StreamReader'
(measure-command {
$count=0
$reader = New-Object IO.StreamReader $testfile
while($reader.ReadLine() -ne $null){$count++}
$reader.close()
}).TotalSeconds
''

'Get-Content -ReadCount'
(measure-command {
$count=0
Get-Content $testfile -ReadCount 1000 |
  foreach {$count += $_.count}
}).TotalSeconds



Get-Content | Measure-Object
175.0600678

StreamReader
20.3832785

Get-Content -ReadCount
6.0199737

关于powershell - Powershell行数包含大量文本文件的csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22237681/

相关文章:

excel - 如何在 Excel 或 Powershell 中根据 IP 地址搜索域名?

windows - WinRM 是否可以允许本地登录但不允许远程登录?

windows - 如何提升在 Azure VM 上运行的远程命令的权限

python - 如何识别并正确解析由 Python 创建的 csv 数据中的列表

powershell - 如何将输出从 PowerShell 中的外部进程捕获到变量中?

java - 仅在 java 中去除双引号内的制表符/空格

python - CSV 在单个 csv 字段中的单个列表中写入多个项目

powershell - 无法使用 powershell 生成的随 secret 码打开 7z 文件

json - Powershell Invoke-RestMethod返回JSON

Powershell如何使用仅知道文件名一部分的测试路径