我有一个包含大约10,000个长度不同的文本文件的目录。所有文件大小都超过1GB。
我需要提取每个文件的第一行,并将其插入到同一目录下的新文本文件中。
我尝试了通常的MS-DOS批处理文件方法,但由于文件太大而崩溃。
是否有一种使用Streamreader在Powershell中完成此操作的方法?
我有一个包含大约10,000个长度不同的文本文件的目录。所有文件大小都超过1GB。
我需要提取每个文件的第一行,并将其插入到同一目录下的新文本文件中。
我尝试了通常的MS-DOS批处理文件方法,但由于文件太大而崩溃。
是否有一种使用Streamreader在Powershell中完成此操作的方法?
编辑:当然,有一种内置的方式:
$firstLine = Get-Content -Path $fileName -TotalCount 1
[Ack Raf's comment]
建议查看File.ReadLines
方法:该方法会惰性地读取文件内容,每次迭代返回的枚举器只读取内容。
我不确定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
}
NB. 这假设至少需要 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
cd c:\path\to\my\text\files\
Get-Content *.txt -TotalCount 1 > output.txt
Get-Content
和Out-File
命令可以实现此目的,请在谷歌上搜索它们。 - Raf