2013-02-22 5 views
1

Я хочу импортировать CSV и отфильтровывать данные с помощью определенных регулярных выражений. Пример ввода CSV:Импорт-Csv с регулярным выражением

John;Doe;18 
Peter;Test;21 

Я хочу, чтобы отфильтровать отдельные имена, например: Я только хочу видеть людей с LastName, начиная с «D», и те, кто 20 лет и старше.

Как написать отфильтрованные данные в новый массив? Вот кусок кода, который я написал до сих пор:

$persons = import-csv -Header "surname", "lastname", "age" -delimiter ";" data.csv 
$persons | ForEach-Object { 
if $_.lastname -match "^d" { 
    #? 
} 

Большое спасибо

ответ

0

Попробуйте следующее:

$persons = Import-Csv -Header "surname", "lastname", "age" -Delimiter ";" data.csv | where { 
    $_.lastname -match '^d' -and $_.age -ge 20 
} 

Он отфильтровывает записи с Lastname, начиная с " d "и возраст 20 или более. Наконец, он сохраняет результаты в массиве с именем $persons

0
$persons | Where-Object {$_.LastName -like "d*" -and $_.Age -gt 20} 
0

попробовать это регулярное выражение

^([^;]*);([^;]*);([^;]*)$ 

Пробовали с Perl

#!/usr/bin/perl 

use strict; 

while (<>) { 

    if (/^([^;]*);([^;]*);([^;]*)$/){ 
     print "first =". $1 . "\n"; 
     print "last =". $2 . "\n"; 
     print "age =". $3 . "\n"; 
    } 
} 

, который дает этот выход

first =John 
last =Doe 
age =18 

first =Peter 
last =Test 
age =21 

однако фокус на регулярном выражении

Смежные вопросы