使用powershell从数组中的字符串中提取值

时间:2017-02-15 11:59:49

标签: arrays powershell

我在尝试从Array中提取特定值时遇到了问题。我有一个包含40010行的数组,每行都是一串管道分隔值(每行64个)。

我需要从每一行中提取值7,4,22,23,24,52和62并将其写入一个新数组,这样我最终会得到一个包含40010行且只有7个管道分隔值的新数组在每个(可能是逗号分隔)行。

我看着分裂,似乎无法理解它甚至接近我需要的东西。

我也愿意从文件中做这件事,因为我正在创建我的第一个阵列 $data = (Get-content $statement_file|Select-String "^01")

如果我可以添加到该命令来对输入进行拆分,那么我只有一个数组,并且不需要更好的中间数组。

我知道如果我在Linux中,我可以很容易地用AWK进行拆分,但我对powershell很新,所以会很感激任何建议

1 个答案:

答案 0 :(得分:4)

# create an array of header columns (assuming your pipe separated file doesn't have headers)
$header = 1..64 | ForEach-Object { "h$_" }

# import the file as 'csv' but with pipes as separators, use the above header, then select  columns 7,4,22,23,24,52,62
# edit 1: then only return rows that start with 01
# edit 2: then join these into a pipe separated string
$smallerArray = $statement_file |
    Import-Csv -Delimiter '|' -Header $header |
    Where-Object { $_.h1.StartsWith('01') } |
    Select-Object @{Name="piped"; Expression={ @($_.h7,$_.h4,$_.h22,$_.h23,$_.h24,$_.h52,$_.h62) -join '|' }} |
    Select-Object -ExpandProperty piped