使用powershell通过许多大文件进行grep

时间:2019-11-06 10:14:31

标签: powershell loops grep

我大约有70个CSV文件,大小均为1GB左右。在Windows环境中,我需要全部遍历才能找到特定的行。

我的搜索文件“ input.txt”包含以下字符串:

  • CG234242424
  • CG234234234
  • CG234234235

在Linux环境中,我会这样做:

for line in `cat input.txt`; do grep $line *.csv >> output.txt; done;

我将如何在Powershell中执行此操作?

背景-我是Linux专家,这是业务用户一次过的审核请求。

1 个答案:

答案 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