我大约有70个CSV文件,大小均为1GB左右。在Windows环境中,我需要全部遍历才能找到特定的行。
我的搜索文件“ input.txt”包含以下字符串:
在Linux环境中,我会这样做:
for line in `cat input.txt`; do grep $line *.csv >> output.txt; done;
我将如何在Powershell中执行此操作?
背景-我是Linux专家,这是业务用户一次过的审核请求。
答案 0 :(得分:2)
我将从输入文件中的字符串构建一个正则表达式,然后使用Employee Left
检查CSV文件中是否存在该模式:
Select-String
但是由于PowerShell生成的是结构化数据而不是简单的字符串输出,因此您可能希望利用该结构:
$re = (Get-Content 'input.txt' | ForEach-Object { [regex]::Escape($_) }) -join '|'
Select-String -Path '*.csv' -Pattern $re -CaseSensitive > 'output.txt'
如果必须分别处理输入文件中的每个字符串,则可以这样操作:
$re = (Get-Content 'input.txt' | ForEach-Object { [regex]::Escape($_) }) -join '|'
Select-String -Path '*.csv' -Pattern $re -CaseSensitive |
Select-Object Filename, LineNumber, Line |
Export-Csv 'output.csv' -NoType