質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

15832閲覧

PowerShellで検索リストを読み込んで、検索対象から読み込んだリストを抜き出す

skt7g417

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2019/08/30 15:45

下記の2つのCSVファイルがあります。1行目はヘッダーです。

検索リスト(CSVファイル)

例)
リスト
aaaaa
ccccc

###検索対象リスト(CSVファイル)
例)
ユーザー,英文字,数字
test1,aaaaa,11111
test2,bbbbb,22222
test3,ccccc,33333
test4,ddddd,44444

###やりたいこと
PowerShellで検索リストを読み込み、読み込んだ値を使って検索対象リスト内を検索し、一致した行を抽出するスクリプトを作成したいです。
イメージとしては下記のWhere-Objectの右辺を読み込んだ検索リストの変数としたいです。

Import-CSV "検索対象リスト" | Where-Object { $.英文字 -eq $.リスト }

foreachなどを使ったり、あらかじめ検索リストを配列に入れたりしたのですが、上手く展開されなくて困っています。

###出力結果の例
上記のCSVを例とすると、最終的に以下のように抽出したいです。

test1,aaaaa,11111
test3,ccccc,33333

ご教示いただけましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PowerShellのバージョンがわかりませんが、検索リストのリストの配列を作成し、
Where-Object内で-contains演算子で判定するのが簡単ではないかと思います。

PowerShell

1# https://teratail.com/questions/209235 2 3# 簡易確認のため、文字列としてCSVの中身を用意している。 4 5# 検索リスト 6[string]$searchCsv = @' 7リスト 8aaaaa 9ccccc 10'@ 11 12# 検索対象リスト 13[string]$targetCsv = @' 14ユーザー,英文字,数字 15test1,aaaaa,11111 16test2,bbbbb,22222 17test3,ccccc,33333 18test4,ddddd,44444 19'@ 20 21# 「検索リスト」の「リスト」列を抽出した文字列配列を作成。 22[string[]]$searchList = 23 ConvertFrom-Csv -InputObject $searchCsv | # 実際はImport-Csv 24 Select-Object -ExpandProperty リスト 25 # Select-Objectは 26 # `ForEach-Object -Process {$_.リスト}`でも可 27 # PowerShell 5など(Windows 10)なら 28 #`(ConvertFrom-Csv -InputObject $searchCsv).リスト`でも可 29 30# 検索対象リスト 31[psobject[]]$targetList = 32 ConvertFrom-Csv -InputObject $targetCsv # 実際はImport-Csv 33 34$targetList | 35 Where-Object -FilterScript {$searchList -contains $_.英文字}

投稿2019/08/30 23:28

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skt7g417

2019/08/31 11:49

ご回答ありがとうございます。 教えていただいた方法で想定していた通りに動きました。 ずっと等価の比較対象を変数にすることばかり考えていたので、とても勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問