使用 MS powershell 过滤大型 CSV

使用 MS powershell 过滤大型 CSV

我想搜索法国协会登记册针对中国组织。由于我无法在办公室电脑上安装任何东西,因此我根据本论坛的另一篇帖子构建了以下 MS powershell 搜索查询:

$file = "import.csv"
$csv = Get-Content $file
$csv | Select-String 'chinois' | Out-File "output.csv"

不幸的是,我得到的输出中有换行符,而这些换行符不应该有。有人能指出更好的方法吗?理想情况下,它还应包括一次搜索多个字符串的选项,并结合逻辑或。作为第一次使用 powershell 的用户,我非常感谢任何评论或想法!

答案1

  • 将 csv 作为文本处理不会保留标题,请通过复制第一行手动执行。
  • 要将搜索模式排除为较长单词的一部分,请将其括在 \b 中
  • RegEx 中的“或”用竖线表示|

## Q:\Test\2018\05\03\SU_1319374.ps1
$InFile = ".\rna_import_20180403.csv"
$OutFile = ".\output.csv"
$pattern = "\bchinois\b|\bassociation\b"  # to exclude chinoise etc.

Get-Content $InFile | Select -First 1 >$OutFile
Get-Content $InFile | Select-String $Pattern | Add-Content $OutFile

上述 $InFile 中的 962 行示例输出中的第 2 行

id;id_ex;siret;gestion;date_creat;date_publi;nature;groupement;titre;objet;objet_social1;objet_social2;adr1;adr2;adr3;adrs_codepostal;libcom;adrs_codeinsee;dir_civilite;telephone;siteweb;email;observation;position;rup_mi;maj_time
751P00052945;00052945;"";751P;1979-11-06;0001-01-01;D;S;CENTRE DE DOCUMENTATION SUR LE CINEMA CHINOIS;développer toutes les activités tendant a faire connaître le cinemachinois en france;006025;000000;"";71        RUE Galande;"";75005;PARIS;75105;PM;"";"";"";W751052945;R;"";2014-10-06 10:29:39
751P00185382;00185382;"";751P;2008-02-21;2008-03-15;D;S;AFAI ASSOCIATION FRANCAISE DES ARTISTES INTENATIONAUX;promouvoir la culture chinoise a paris et les échanges culturels avec les artistes chinois et internationaux;006000;000000;"";4         RUE Georges berger;"";75017;PARIS;75117;PM;"";"";"";"";A;"";2009-05-25 05:00:00

答案2

不要Get-Content考虑使用Import-CSVWhere-Object以便读取和过滤文件。之后你可以使用Export-CSV导出文件。

它可能看起来与此类似:

$inputCsv = Import-Csv -Delimiter ';' -Path "file.csv"
$inputCsv = $inputCsv | Where-Object {$_.Attribute -eq 'x' -or $_.Attribute -eq 'y'}
Export-Csv -Path 'output.csv' -InputObject $inputCsv

您可以使用Get-Help和简写-?来获取有关 PowerShell CLI 的帮助。例如,您可以运行Export-Csv -?来显示 的帮助Export-Csv

相关内容