• 締切済み

PowerShellの文字操作について

恐れ入ります、Powershellを、独学でWebで、調べな柄試しているのですが、よくわからなく、初心者で申し訳ないのですが、ご指導いただけますと幸いです。 やりたいことは、CSVファイル1内から、項目Bの”AAA”を含む文字を抽出して、項目Cと別のCSVファイル2の項目で値が一致しないものを、別CSVファイルにしたいというものなのですが、 CSVファイル1の項目Bから条件一致するデータが抜き出せず、困っております。 $a = Get-Content C:\test\\1.csv | Where-Object {$_.B -like "AAA*"} |out-file C:\test\X.csv -encoding Default | Where-Object {$_.B -like "AAA*"} が良くないのか、Out-fileでファイルが作成されるのですが、中にデータが0で抽出ができませんでした。 どこでうまくいっているのかを確認する方法もわからなくて質問して本当に申し訳ありませんが、少しでも何かヒントいただけると助かります。どうぞよろしくお願いいたします。

みんなの回答

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

察しておられるとおり、$_.Bの部分がおかしいです。 get-contentはテキストファイルを読み出し、1行ずつの文字列を配列として返します。 したがって$_はただの文字列で、当然ながら「B」というプロパティは持っていません。 $_.Bは""に評価され、-like判定も偽となります。 パイプに何も流れないので、後段のout-fileは空っぽのファイルを生成します。 さて、「項目B」と書いていますが、これはCSVファイルの1行目が A,B,C,D のような形式なのでしょうか。 もしそうなっているなら、 $a=import-csv "CSVのパス" とすると、$aにcsvの中身がpowershellオブジェクトとして読み込まれます。こうなれば、「B」で二番目の要素にアクセスできます。 $a|foreach-object{$_.b} 1行目がヘッダーではなく、いきなりデータが始まっているなら、 $a=import-csv "CSVのパス" -header @("A","B","C","D") とすれば上と同じように二番目の要素にアクセスできます。

すると、全ての回答が全文表示されます。

関連するQ&A