2017-02-15 28 views
1

配列から特定の値を抽出しようとすると問題が発生しました。私は40010の行を含む配列を持っています。各行はパイプで区切られた値の文字列です(各行に64)。powershellを使用して配列の文字列から値を抽出する

各行から7,4,22,23,24,52、および62の値を抽出し、それを新しい配列に書き込む必要があります。これによって、40010の行を含む新しい配列になります。それぞれの値(カンマで区切ってもよい)の行。

私は分割を見ていて、私の頭の中で私の必要なものに近づくことさえできないようです。

また、私は私が入力の分割を行うには、そのコマンドに追加することができる場合、私は現在、
$data = (Get-content $statement_file|Select-String "^01")

と私の第一の配列を作成していて、ファイルからこれを行うに開いていると思います1つの配列しか持たず、より良い中間配列を必要としません。

私は私が何かを逃したが、あなたは、配列を構築することができると思うか提案

+0

をいただければ幸い私はLinuxの中だった場合、私は非常に簡単にAWKでの分割を行うことができます知っているが、私はそうPowerShellをすることはかなり新しいです値と行数が分かっていれば、入力ファイルは一切ありません。 – sodawillow

答えて

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 
+0

これは私の望むものに近いですが、ファイルには600,000を超えるレコードがあり、最初のフィールドに01で始まる40,010だけが必要です。私は現在、これをやっています。
'$ data1 =(Get-content $ statement_file | Select-String"^01 ") $ data1 | ac $ tmp_file $ data2 = $ tmp_file | Import-Csv -Delimiter '|'ヘッダー$ヘッダー| h7、h4、h22、h23、h24、h52、h62の選択 – dazedandconfused

+0

最初のフィールドで01をフィルタリングするように編集します – TechSpud

+0

もう1つの問題は$ data1 [3]を実行すると "01 | 456000003 | 00000012 | N | WEBB | Webb Ivory Acount | 003 | Webb Ivory | OPEN | 123000072 | Mr | Ioan | LastName | 12道路名|ここに地域名|ここに郡名 ここに| AA11 1AA | N | 20161028 | 20161120 | 250.00 | 250.00 | 250.00 | 200.00 | 0.00 | 200.00 | 0.00 | 0.00 | 0.00 | 10.00 | 5.00 | N | Y | 20161120 | 5.00 || | 0.00 | N | N | 0.00 | A | 1 | N ||| ||||||| "私は$ DATA2を行うときはまだ[3]私は "H7:003 H4:N H22:250.00 H23:250.00 H24:250.00 H52: H62は、" get私は、出力のために必要なもの – dazedandconfused

関連する問題