【问题标题】:Adding headers into split files in PowerShell在 PowerShell 中将标头添加到拆分文件中
【发布时间】:2019-06-13 09:56:41
【问题描述】:

我目前正在使用我在网上找到的 PowerShell 脚本来拆分包含一组标题的 .txt(制表符分隔)文件,然后大约 100 万行。我正在寻找添加一些内容,这些内容将从第一行获取标题并将它们复制到每个拆分文件中。

我试过在网上四处寻找,但我尝试过的一些解决方案似乎只是创建一堆只有标题的文件,然后用数据行分隔文件。

$i=0;
Get-Content example.txt -ReadCount 50000 | %{
    $i++;
    $_ | Out-File out_$i.txt
}

【问题讨论】:

  • 每个拆分文件到底是什么意思。问题是什么?您是否正在寻找将大型 CSV 文件拆分为一系列较小 CSV 文件的方法?
  • 嗨 Theo,我有一个大的 csv,我可以使用上面的代码将其拆分为较小的文件,但是新文件不包含列标题,我正在寻找可以保留的内容每个较小文件中的列标题
  • 你试过使用Import-CsvExport-Csv吗?
  • 在循环之前,只需设置一个可以在循环期间引用的变量。 $header = Get-Content example.txt -TotalCount 1.

标签: powershell


【解决方案1】:

在循环之前将标头读入变量,然后在附加内容之前将其写入输出文件:

$header = Get-Content example.txt -TotalCount 1
Get-Content 'example.txt' -ReadCount 50000 | ForEach-Object {
    $i++
    $header | Set-Content "out_$i.txt"
    $_ | Add-Content "out_$i.txt"
}

【讨论】:

  • 一旦我追加并运行此脚本,它会创建 1 个包含所有数据的输出文件,但会一遍又一遍地打印错误,因此它会尝试创建每个文件,但在创建时会出错。 '++' 运算符仅适用于数字。操作数是“System.String”。在 line:3 char:5 + $i++ + ~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : OperatorRequiresNumber
  • @GoldenBoy 在脚本顶部添加[int]$i = 0
【解决方案2】:

此代码将拆分文件大小并将已存在的标题添加到所有后续文件中。您可以取出下面的“调试”行。

cls
Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog
$FileBrowser.ShowDialog()
$file = $FileBrowser.FileName
cls
Write-Host "Opening " $file
$header = Get-Content $file -First 1
Write-Host $header
$i=0; Get-Content $file -ReadCount 500 | %{$i++; if($i-gt 1){$header | Set-Content csvout-$i.csv;} $_ | Add-Content csvout-$i.csv}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2012-04-06
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多