gpt4 book ai didi

powershell - 在powershell中连接csv文件,没有第一行(第一个文件除外)

转载 作者:行者123 更新时间:2023-12-03 01:28:35 31 4
gpt4 key购买 nike

我有多个 *.csv 文件。我想在 powershell 脚本中将它们连接成一个 CSV 文件。所有 csv 文件都有相同的标题(第一行),所以当我连接它们时,我只想保留第一个文件的第一行。

我怎样才能做到这一点?

最佳答案

注意:中的解决方案这个答案故意使用纯文本处理 处理文件,有两个原因:

  • 使用 Import-CsvExport-Csv产生大量处理开销(尽管在给定情况下这可能无关紧要); 纯文本处理明显更快 .
  • 在 Windows PowerShell 和 PowerShell [Core] 6.x 中,输出将始终具有双引号列值 ,即使它们最初不是(尽管这通常无关紧要)。
  • 在 PowerShell [核心] 7.0+ 中 Export-CsvConvertTo-Csv现在有一个 -UseQuotes允许您控制输出中的引用的参数。

  • 也就是说, Import-CsvExport-Csv当您需要阅读和解释数据时,当然是更好的选择 (而不是在别处复制它) - 见 Sid's helpful answer .
    # The single output file.
    # Note: Best to save this in a different folder than the input
    # folder, in case you need to run multiple times.
    $outFile = 'outdir/out.csv'

    # Get all input CSV files as an array of file-info objects,
    # from the current dir. in this example
    $inFiles = @(Get-ChildItem -Filter *.csv)

    # Extract the header line (column names) from the first input file
    # and write it to the output file.
    Get-Content $inFiles[0] -First 1 | Set-Content -Encoding Utf8 $outFile

    # Process all input files and append their *data* rows to the
    # output file (that is, skip the header row).
    # NOTE: If you only wanted to extract a given count $count of data rows
    # from each file, add -First ($count+1) to the Get-Content call.
    foreach ($file in $inFiles) {
    Get-Content $_.FullName | Select-Object -Skip 1 |
    Set-Content -Append -Encoding Utf8 $outFile
    }

    注意使用 -Encoding Utf8举个例子;根据需要调整;默认情况下, Set-Content将在 Windows PowerShell 中使用“ANSI”编码,在 PowerShell Core 中使用无 BOM 的 UTF-8。

    警告:通过逐行纯文本处理,您依赖于代表单个 CSV 数据行的每个文本行;这通常是正确的,但并非必须如此。

    相反,如果性能最重要,直接使用 .NET 方法(例如 [IO.File]::ReadLines() )可以显着加快上述纯文本方法的速度。或者,如果文件足够小,甚至 [IO.File]::ReadAllLines() .

    关于powershell - 在powershell中连接csv文件,没有第一行(第一个文件除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60169918/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com