Фильтровать большой CSV с помощью MS powershell

0

Я хочу найти реестр ассоциаций во Франции для китайских организаций. Поскольку я ничего не могу установить на своем офисном компьютере, я построил следующий поисковый запрос MS PowerShell на основе другого сообщения в этом форуме:

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

К сожалению, вывод, который я получаю, имеет разрывы строк там, где их не должно быть. Кто-нибудь может указать лучший способ сделать это? В идеале это также включало бы возможность поиска нескольких строк одновременно, в сочетании с логическим ИЛИ. Будучи новым пользователем powershell, я очень ценю любые комментарии или идеи!

dufei
источник
2
Являются ли эти разрывы строк на входе также? Select-String позволяет использовать регулярные выражения, поэтому поиск нескольких строк - это просто регулярное выражение.
Ливен Керсмакерс
Я вижу, что это может быть проблема Excel, которую я использую, чтобы открыть экспортированный файл: даже если я установлю тот же разделитель (точка с запятой), выходной файл будет иметь только 17 столбцов вместо прежних 24 столбцов. Разрывы строк не должны иметь никакого эффекта, верно? Спасибо за подсказку к регулярному выражению!
Dufei

Ответы:

0
  • Обработка csv как текста не сохранит заголовок, сделайте это вручную, скопировав 1-ю строку.
  • Чтобы исключить шаблон поиска как часть более длинного слова, заключите его в \ 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

Пример вывода 2 из 962 строк сверху $ InFile

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
LotPings
источник
Это, кажется, делает свое дело, большое спасибо! Я удалил "\ bassociation \ b", так как я не хочу никаких записей, которые содержат только это слово.
dufei
Это был всего лишь образец для соответствующего ему условия chinoisили associationкак слова, не являющегося частью другого слова.
LotPings
1

Вместо использования Get-Contentрассмотрите использование Import-CSVи Where-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. Так, например, вы можете бежать, Export-Csv -?чтобы показать помощь для Export-Csv.

Сет
источник