Windows下如何从TTL文件提取与CSV匹配的内容至新CSV?
当然可以在Windows下搞定这个需求!下面给你几种实用的方案,从自带工具到灵活选项都有,你可以根据自己的情况选:
方法1:用PowerShell(Windows自带,零额外安装)
这是最省心的方案,因为PowerShell是Windows默认就有的工具,不用折腾下载安装。
假设你的CSV文件叫resources.csv,TTL文件叫data.ttl,要生成的新CSV叫matching_lines.csv,步骤如下:
- 打开PowerShell:按下Win+R,输入
powershell回车就行。 - 切换到文件所在的文件夹,比如文件在D盘的
data目录里,就输入:cd D:\data - 运行核心命令:
简单解释下:$patterns = Get-Content .\resources.csv Select-String -Path .\data.ttl -Pattern $patterns | Select-Object -ExpandProperty Line | Out-File .\matching_lines.csv -Encoding utf8Get-Content .\resources.csv:把CSV里的每一行都读出来,作为要匹配的关键词Select-String:在TTL文件里搜索包含这些关键词的行Select-Object -ExpandProperty Line:只提取匹配到的纯行内容,去掉多余的元数据Out-File:把结果保存到新CSV,指定utf8编码是为了避免中文或特殊字符乱码
如果你的CSV是数百万行的超大文件,上面的命令可能会占用较多内存,可以改成逐行处理的版本,内存友好度更高:
$outputFile = ".\matching_lines.csv" # 先清空已存在的输出文件(如果有的话) if (Test-Path $outputFile) { Remove-Item $outputFile } # 逐行读取CSV,逐个匹配TTL内容并追加到输出文件 Get-Content .\resources.csv | ForEach-Object { $currentPattern = $_ Select-String -Path .\data.ttl -Pattern $currentPattern -SimpleMatch | Select-Object -ExpandProperty Line | Add-Content $outputFile -Encoding utf8 }
这里加了-SimpleMatch参数,能确保CSV里的特殊字符(比如.、*)被当作普通文本匹配,不会被当成正则表达式解析出错。
方法2:用WSL(Linux命令党福音)
如果你本来就熟悉Linux的grep,可以用Windows子系统(WSL)直接在Windows里跑Linux命令:
- 先启用WSL:打开控制面板→程序→启用或关闭Windows功能,勾选“适用于Linux的Windows子系统”,重启电脑后去微软商店装个Ubuntu(免费)。
- 打开Ubuntu终端,把Windows的文件路径转换成WSL格式(比如D盘的
data目录对应/mnt/d/data),然后运行:
解释下参数:grep -F -f resources.csv data.ttl > matching_lines.csv-F:把CSV里的内容当作固定字符串匹配,避免特殊字符干扰-f resources.csv:从CSV文件读取要匹配的所有模式> matching_lines.csv:把结果输出到新文件
这个方法处理超大文件的效率通常比PowerShell更高,毕竟grep是专门干这个的。
方法3:用图形界面工具(GrepWin)
如果不想敲命令,喜欢可视化操作,可以用免费的GrepWin工具:
- 搜索“GrepWin”下载安装(是个轻量工具,没广告)
- 打开后按下面设置:
- 在“搜索内容”区域,选择“从文件加载”,选中你的CSV文件
- 在“搜索位置”里选中你的TTL文件
- 勾选“仅显示匹配的行”,然后点击“搜索”
- 搜索完成后,点击右上角的“导出”,选择保存为CSV格式就行
内容的提问来源于stack exchange,提问作者Knarf
相关产品推荐
相关产品推荐

