1

我想导入 CSV 并使用某些正则表达式过滤掉数据。输入 CSV 示例:

John;Doe;18
Peter;Test;21

我想过滤掉个人姓名,例如:我只想查看姓氏以“d”开头的人以及 20 岁及以上的人。

如何将过滤后的数据写入新数组?这是我到目前为止编写的一段代码:

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

非常感谢

4

3 回答 3

0
$persons | Where-Object {$_.LastName -like "d*" -and $_.Age -gt 20}
于 2013-02-22T09:31:53.673 回答
0

尝试以下操作:

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

它过滤掉 lastname 以“d”开头并且年龄为 20 或更大的记录。最后,它将结果保存在一个名为$persons

于 2013-02-22T09:35:35.203 回答
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

但是专注于正则表达式

于 2013-02-22T09:43:15.113 回答