如何在powershell中将一个大文本文件拆分为多个文件

2024-05-12

你好,我有一个像这样的大文本文件

BIGFILE.TXT

COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
11/24/2013,50.67,51.22,50.67,51.12,17,0,FILE1
11/25/2013,51.34,51.91,51.09,51.87,23,0,FILE1
12/30/2013,51.76,51.82,50.86,51.15,13,0,FILE1
12/31/2013,51.15,51.33,50.45,50.76,18,0,FILE1
1/1/2014,50.92,51.58,50.84,51.1,19,0,FILE2
1/4/2014,51.39,51.46,50.95,51.21,14,0,FILE2
1/7/2014,51.08,51.2,49.84,50.05,35,0,FILE2
1/8/2014,50.14,50.94,50.01,50.78,100,0,FILE3
1/11/2014,50.63,51.41,50.52,51.3,190,0,FILE3
1/15/2014,54.03,55.74,53.69,54.93,110,0,FILE4
1/19/2014,53.67,54.19,53.55,53.82,24,0,FILE4
1/20/2014,53.83,54.26,53.47,53.53,23,0,FILE4
1/21/2014,53.8,54.55,53.7,54.1,24,0,FILE4
1/26/2014,53.26,53.93,53.23,53.65,31,0,FILE5
1/27/2014,53.78,54,53.64,53.81,110,0,FILE5

我正在寻找如何将此文件拆分为多个文本文件的方法。在这种情况下,一个文件将被拆分为 5 个文本文件。每个文本文件的名称取自第 8 列。大文件以逗号分隔。所以输出将是:

FILE1.txt

COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
11/24/2013,50.67,51.22,50.67,51.12,17,0,FILE1
11/25/2013,51.34,51.91,51.09,51.87,23,0,FILE1
12/30/2013,51.76,51.82,50.86,51.15,13,0,FILE1
12/31/2013,51.15,51.33,50.45,50.76,18,0,FILE1

FILE2.TXT

COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
1/1/2014,50.92,51.58,50.84,51.1,19,0,FILE2
1/4/2014,51.39,51.46,50.95,51.21,14,0,FILE2
1/7/2014,51.08,51.2,49.84,50.05,35,0,FILE2

FILE3.TXT

COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
1/8/2014,50.14,50.94,50.01,50.78,100,0,FILE3
1/11/2014,50.63,51.41,50.52,51.3,190,0,FILE3
.
.
.

这个大文本文件有几千行。 有人知道如何做到这一点吗?

谢谢你的帮助。 J。


如果大文件有几千行,那么它并没有那么大,您可以使用Import-CSV and Export-CSV来处理内容。

$big = Import-Csv big.csv
$big | ? { $_.column8 -eq "file1" } | Export-Csv -NoTypeInformation file1.csv

# Output
cat .\file1.csv
"COLUMN1","COLUMN2","COLUMN3","COLUMN4","COLUMN5","COLUMN6","COLUMN7","COLUMN8"
"11/24/2013","50.67","51.22","50.67","51.12","17","0","FILE1"
"11/25/2013","51.34","51.91","51.09","51.87","23","0","FILE1"
"12/30/2013","51.76","51.82","50.86","51.15","13","0","FILE1"
"12/31/2013","51.15","51.33","50.45","50.76","18","0","FILE1"

另一方面,如果文件太大而导致您的系统卡住Import-CSV,读取文件IO.StreamReader()并逐行处理文件。

Edit:

哦,好吧,处理数千个输出文件有点棘手。具有大量磁盘 I/OAdd-Content是一个性能杀手,但对于单次操作来说,这样的操作应该有效:

$src = "c:\temp\reallybig.csv"  # Source file
$dst = "c:\temp\file{0}.csv"    # Output file(s)
$reader = new-object IO.StreamReader($src)  # Reader for input

while(($line = $reader.ReadLine()) -ne $null){ # Loop the input
    $match = [regex]::match($line, "(?i)file(\d)") # Look for row that ends with file-and-number

    if($match.Success){
     # Add the line to respective output file. SLOW! 
     add-content $($dst -f $match.Groups[0].value) $line 
    }
}
$reader.Close() # Close the input file

为了提高性能,基于输出文件StringBuilder缓冲效果非常好。

Edit2:

这是另一个版本。它包含一个包含 StringBuilder 对象的哈希表。最后一列中的每个输出文件名用作键,其值是包含文本数据的 StringBuilder。这种方法将所有输出文件数据存储在内存中,因此 x64 和一些 GB 的 RAM 可以加速用于相当大的输入文件。缓冲区可以时不时地刷新到磁盘以节省内存;这需要额外的簿记。

$src = "c:\temp\reallybig.csv"   # Source file
$dst = "c:\temp\file_{0}.csv"    # Output file(s)
$reader = new-object IO.StreamReader($src)  # Reader for input

$header = Get-Content -Path $src | select -First 1 # Get the header row

$ht = @{}
$line = $reader.ReadLine() # Skip the first line, it's alread in $header

while(($line = $reader.ReadLine()) -ne $null){ # Loop the input
    $match = [regex]::match($line, '(?i)(\w+\d)$') # Look for row that ends with file-and-number

    if($match.Success){

      $outFileName = $match.Groups[0].value # What filename output is sent to?

      if(-not $ht.ContainsKey($outFileName)) { # Output file is not yet in hashtable
        $ht.Add($outFileName, (new-object Text.StringBuilder) )
        [void]$ht[$outFileName].Append($header)
        [void]$ht[$outFileName].Append([Environment]::NewLine)
      } else { # Append data to existing file
        [void]$ht[$outFileName].Append($line)
        [void]$ht[$outFileName].Append([Environment]::NewLine)
      }
    }
}
$reader.Close() # Close the input file

# Dump the hashtable contents to individual files
$ht.GetEnumerator() | % { 
    set-content $($dst -f $_.Name) ($_.Value).ToString() 
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在powershell中将一个大文本文件拆分为多个文件 的相关文章

  • powershell:使用参数启动程序的脚本?

    当我运行下面的 Powershell 脚本时 我收到以下错误 如何通过 powershell 带参数运行程序 该脚本将是组策略登录 Invoke Expression 找不到位置参数 接受参数 TBHSERVER NETLOGON BGIn
  • 获取文件夹及其子文件夹中最长文件路径的长度

    我正在寻找一个可以从命令行 批处理 PowerShell 运行的脚本 该脚本将遍历文件夹及其子文件夹 并返回一个数字 该数字是最长文件路径的长度 我已经看到了一些批处理和 PowerShell 脚本 例如 如何在 Windows 中查找路径
  • PSExec 中的会话 ID

    Psexec 无法在远程会话上为我显示记事本 GUI 因此 我尝试获取会话 ID 如下所示 c Users Amitra Downloads PSTools gt PsExec u administrator p force 135 20
  • 如何将逗号分隔的字符串解析为列表(警告)?

    我需要能够采用如下字符串 foo bar one two three four into foo bar one two three four 我有一种感觉 来自 python 的提示 解决方案将涉及 shlex 模块 这取决于您想要变得多
  • 如何将字符串拆分为新行并保留空白行?

    给出 ruby 代码 aaaa nbbbb n n split n 这输出 aaaa bbbb 我希望输出包含由 n n 我想要的结果是 aaaa bbbb 获得这个确切结果的最简单 最好的方法是什么 我建议使用lines代替split为了
  • 过滤路径列表以仅包含文件

    如果我有一个清单FilePaths 如何过滤它们以仅返回常规文件 即不是符号链接或目录 例如 使用getDirectoryContents main do contents lt getDirectoryContents foo bar l
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • 带有多个附件的电子邮件

    我正在为服务台编写一个 PowerShell 脚本 以便在将 userhome 文件夹从服务器迁移到 NAS 设备时使用 帮助台用户将用户名输入到 userhomelist txt 文件中 我的问题是我无法获取脚本来附加所有日志文件 电子邮
  • 如何在 PowerShell 中远程执行 ELEVATED 远程脚本

    我有两台服务器 serverA Windows 2003 服务器 serverB Windows 7的 ServerA包含一个带有批处理文件 deploy bat 的文件夹 需要从提升的 powershell 提示符执行该批处理文件 在Se
  • Get-AzureStorageBlob 抛出找不到您的 azure 存储凭据

    我刚刚开始使用 Azure 在使用 PowerShell cmdlet 处理我的存储帐户时遇到问题 我已经创建了一个存储帐户并在该存储帐户中创建了一个容器 接下来 我安装了 Azure Powershell SDK 和命令让等 并导入了pu
  • 如何使用 Dart 将列表拆分或分块为相等的部分?

    假设我有一个类似的列表 var letters a b c d e f g h 我想要一个列表 每个列表包含 2 个元素 var chunks a b c d e f g h 使用 Dart 执行此操作的好方法是什么 这是另一种方法 var
  • 使用java在mysql中插入带有\\的文件路径

    我正在使用java制作一个独立的应用程序 并且我需要插入用户从文件选择器中选择的图像的路径 我正在获取文件的路径 但是当我将其存储在数据库 mysql 中时 它不会存储 所以当我检索该路径时 该文件不会显示 如何存储文件的路径 这样就可以使
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu
  • 如何使用 P/Invoke 在 PowerShell 1.0 中调用 Win32 函数?

    在许多情况下 从 PowerShell 脚本调用 Win32 函数或其他一些 DLL 会很有用 给定以下函数签名 bool MyFunction char buffer int bufferSize 我听说 PowerShell CTP 2
  • 在Windows中根据修改日期删除数百万个文件的最有效方法

    目标 使用脚本运行 500 万至 1000 万个 XML 文件并评估其日期 如果超过 90 天则删除该文件 该脚本将每天运行 问题 使用 powershell Get ChildItem recurse 会导致脚本锁定并无法删除任何文件 我
  • 如何快速从文件夹树中选取随机文件?

    我试图从文件夹树中选择一个随机文件 从固定路径开始 并在所有子文件夹 或所选文件夹本身 中递归 搜索 我的想法是 创建文件列表 计算文件数量 在该范围内选择一个随机数 然后选择该索引处的文件 这是我的代码 create list of al
  • 从命令行调用PowerShell函数

    鉴于以下情况say hello ps1我的文件系统上的文件 function SayHello return Hello World 像这样在命令行上调用 它最终将作为 Windows 计划任务运行 powershell Execution
  • 具有多个范围的 Powershell 整数参数验证

    我知道您可以声明一个仅接受特定范围内的值的整数参数 Parameter ValidateRange 1024 66535 Port 是否可以验证多个范围的参数输入 例如 假设我希望允许端口输入为 1 到 80 135 到 445 以及 10
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • 获取在特定日期之后修改的一组文件

    有没有人有一个方便的 powershell 脚本根据修改日期从 TFS 获取一组文件 我想说 给我这个文件夹 或子文件夹 中在 X Y ZZZZ 之后修改的所有文件 并将这些文件转储到它们通常所在的文件夹之外的文件夹中 我知道足够的 pow

随机推荐

  • 如何使用 Amazon 的 EMR 在 CLI 中使用自定义 jar 指定 mapred 配置和 java 选项?

    我想知道如何指定mapreduce配置 例如mapred task timeout mapred min split size等等 当使用自定义 jar 运行流作业时 当我们使用 ruby 或 python 等外部脚本语言运行时 我们可以使
  • iFrame 中的 Javascript iPhone 滚动效果 / Javascript 鼠标加速

    我正在尝试使用 JavaScript 在窗口中重新创建 iPhone 轻拂 滚动事件 从 JQuery 开始 我使用计时器测量单击 拖动 释放事件期间鼠标的加速度和偏移量 var MouseY init function context v
  • 时间戳相减必须具有相同的时区或没有时区,但它们都是 UTC

    有一些问题解决了相同的错误TypeError Timestamp subtraction must have the same timezones or no timezones但没有一个面临与此相同的问题 我有 2 个 UTC 时间戳 在
  • Android 联系人提取

    是否有可能使用标准 Android API 提取以下某些格式 vCard hCard 或 json xml 的联系人 ContentResolver cr getContentResolver Cursor cur cr query Con
  • 包含带有 android 风味的库

    我之前的应用程序 gradle 文件 compile project path zblelib 但是当我将口味添加到库中时 我的导入不起作用 我的口味 flavorDimensions dim productFlavors nocustom
  • RestKit链接器错误

    我一直遵循 RestKit 安装说明 但现在在尝试构建应用程序时出现错误 这是针对 ios iPad 的 我收到 命令 Developer Platforms iPhoneSimulator platform Developer usr b
  • 使用 ggplot 未完全填充等值线图

    我正在尝试使用以下方法绘制我的第一个填充等高线图ggplot 根据我的数据 我期待类似的结果 但我的结果是 a lt c 1 1 1 1 1 3 1 2 2 2 2 2 2 5 2 1 3 3 3 3 1 3 2 b lt c rep c
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • WebView 不运行 loadHTMLString 中给出的 JavaScript

    我不明白为什么这不起作用 我的桌面上有一个 test htm 文件 如下所示 This is x 2 我有一个 WebVie
  • 如何追踪手柄泄漏?

    在我的一个应用程序中 我观察到句柄数量不断增加 在不使用应用程序的情况下 该数字大约每秒增加一次 因此后台处理代码的某些部分一定存在句柄泄漏 我如何追踪此类泄漏 有什么工具可以帮助解决这个问题吗 跟踪句柄泄漏时要寻找哪些模式 导致手柄泄漏的
  • 获取 Postgres 数据库中每个表的行数

    获取数据库中所有表的行数的最有效方法是什么 我正在使用 Postgres 数据库 结果示例 table name row count some table 1 234 foobar 5 678 another table 32 如果您想要特
  • git分支和标签如何存储在磁盘中?

    我最近检查了我工作中的一个 git 存储库 其中有 10 000 多个分支和 30000 多个标签 新克隆后 存储库的总大小为 12Gigs 我确信没有理由拥有 10000 个分支机构 所以我相信它们会占用磁盘中相当大的空间 所以 我的问题
  • 调用 LWRP 时的 Cookbook 名称前缀

    Summary 我可以使用外部说明书中的 LWRP 而不添加说明书名称前缀吗 例如 如果mycookbook包含mylwrp资源 我该怎么做 include recipe mycookbook Contains mylwrp mylwrp
  • GetX 解绑流

    我正在使用bindStream 函数与GetX封装在控制器内 class FrediUserController extends GetxController override void onReady super onReady fina
  • SSMS 与 Sybase ASE 的连接

    有没有办法使用 Sql Server Management Studio 2008 连接到 Sybase ASE 数据库实例 我尝试使用其他工具进行连接 但它们非常有限 我想使用 SSMS 您可以使用这个工具 SqlDbx http www
  • 如何使用 Google Sheets onEdit() 触发器运行函数来更新 Google Form

    我有一个 Google 表格工作簿 其中有一个工作表 我想用它来保存工作簿和 Google 表单的设置 我做了一个定制onEdit 触发两个函数的函数 一个用于更新工作簿 另一个用于更新表单 function onEdit e var ra
  • jqgrid editoptions:必需的不起作用

    好吧 不确定我在这里做错了什么 list jqGrid url URL datatype json mtype GET colModel label Index index Index key true hidden true label
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • Unity IoC 和 MVC 3 Beta - 将 IRepository 传递给控制器​​构造函数

    MVC 3 中有什么变化吗 我已经尝试了互联网上所有将 Unity 设置为我的 IoC 容器的示例 但我不断收到错误消息 指出 Unity 无法解析我的 UserController 这是我的 UserController 上的构造函数 p
  • 如何在powershell中将一个大文本文件拆分为多个文件

    你好 我有一个像这样的大文本文件 BIGFILE TXT COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COLUMN6 COLUMN7 COLUMN8 11 24 2013 50 67 51 22 50 6