Powershell-如何将目录中所有文本文件的第一行提取到单个输出文件中?

Powershell-如何将目录中所有文本文件的第一行提取到单个输出文件中?,powershell,text,large-files,Powershell,Text,Large Files,我有一个目录,里面有大约10000个不同长度的文本文件。大小都超过1GB 我需要提取每个文件的第一行,并将其插入同一目录中的新文本文件中 我尝试了通常的MS-DOS批处理文件方法,但由于文件太大,它崩溃了 在Powershell中是否有使用Streamreader执行此操作的方法?编辑:当然有一种内置方式: $firstLine = Get-Content -Path $fileName -TotalCount 1 [阿克的评论] 原件: 我建议看一看:这个方法缓慢地读取文件的内容——只在返

我有一个目录,里面有大约10000个不同长度的文本文件。大小都超过1GB

我需要提取每个文件的第一行,并将其插入同一目录中的新文本文件中

我尝试了通常的MS-DOS批处理文件方法,但由于文件太大,它崩溃了


在Powershell中是否有使用Streamreader执行此操作的方法?

编辑:当然有一种内置方式:

$firstLine = Get-Content -Path $fileName -TotalCount 1
[阿克的评论]


原件:

我建议看一看:这个方法缓慢地读取文件的内容——只在返回的枚举数上每次迭代时读取内容

我不确定
Select Object-first 1
是否会在一行之后主动停止管道,如果是这样,那么这是获取第一行的最简单方法:

$firstLine = [IO.File]::ReadLines($filename, [text.encoding]::UTF8) | Select-Object -first 1
否则类似于:

$lines = [IO.File]::ReadLines($filename, [text.encoding]::UTF8); # adjust to correct encoding
$lineEnum = $lines.GetEncumerator();
if ($lineEnum.MoveNext()) {
  $firstLine = $lineEnum.Current;
} else {
  # No lines in file
}

注意。这假设至少有PowerShell V3使用.NET V4。

为了只读取一行,您还可以使用:

$file = new-object System.IO.StreamReader($filename)
$file.ReadLine()
$file.close()
使用,您可以将其写在一行中:

$text = (new-object System.IO.StreamReader($filename) -OutVariable $file).ReadLine();$file.Close()
又短又甜:

cd c:\path\to\my\text\files\
Get-Content *.txt -First 1 > output.txt
编辑2018年11月:根据文档,“TotalCount参数将检索限制在前n行。”这似乎是为了最小化资源使用。自己测试并添加评论

cd c:\path\to\my\text\files\
Get-Content *.txt -TotalCount 1 > output.txt

获取内容
输出文件
cmdlet结合使用可以实现这一点,用谷歌搜索它们。感谢您的。。。“有用”的建议。实际上,“获取内容”会在对文件执行任何操作之前将文件的全部内容加载到内存中。事实上,我以前试过在大文件上使用它,在1GB的文件上,它分配了8GB的RAM,用完了所有内存,然后开始在磁盘上分页大约8个小时,直到计算出一行。对于需要重复10000次的工作来说,这并不理想。“谷歌it”并不是我想要的那种建议。谢谢!由于我的文件超过1GB,“获取内容”会在尝试“获取”文件的“内容”之前将整个文件加载到内存中,因此我无法使用您的建议。然而,你的第三个建议非常有效!:)最重要的建议很管用。针对1GB文件测试它(使用-TotalCount参数),看看它是否没有立即返回第一行。这会将整个文件加载到内存中,在这种情况下不起作用/不理想。