続きますよw
自分が迷ったとき、どこでも見られるように載せています
Powershellで効率化シリーズ
・CSV 指定した列を削除したい
・CSVでダブルクォーテーションを除いて出力
今回は
CSVのカラムの中から、キーワードを含む行を抽出する
(結果はファイルexport)
データーベースのヘッダーがA1,A2,A3,~A25まで続くとして
A4の列から、博多、箕面、呉を3つ抽出したい
単語そのものではなく、広島県呉市など、含まれる中からワード「呉」で行を抽出したい場合
正規表現を使うと簡単
| Where-Object { ($_.A4 -match '.*博多.*|.*箕面.*|.*呉.*')}
A4という場所にある博多、箕面、呉を含む(match)行を出してくれる命令
「.*」はその前後も探す
「|」が or を意味する
ちなみに、「含む」ではなく、そのものを抽出するときは
(例えば、日本、イタリア、メキシコ、などスパッとした情報)
-match マッチではなく
イコール の「-eq」を使う、その時「.*」は必要ない
列をまたいで抽出したい場合
1つ列 A4で博多、箕面、呉を抽出し、
2個目の列は、A10で「(500)」を含む行を抽出したい場合
例えばA10に
|abc(500)ee
|pew(500-2)rer
|bgu(500)
といういろんなのが入っていて、(500)を含む行だけを抽出したいという時です
今度は厄介な「記号入り」のデータが含まれる場合です
| Where-Object { ($_.A4 -match '.*博多.*|.*箕面.*|.*呉.*') -and ($_.A10 -match '.*\(500\).*')}
1行の命令文なので、続くよということで -and
あとは繰り返しで、今度は列A10なので ($_.A10 -match
‘この中身’ → .*\(500\).*
かっこ記号の前にある斜めの棒「\
」何よ!って思いますよね
半角記号、かっこはコマンドでも使用するので、
ただの文字ですよということを「\
」で教えてあげる、逃がすための記号が[\
]
今までこの作業を、
表計算ソフトでCSVを読み込み、新しいシートを作り、フィルタ抽出して貼り付け先を指定
古いシートを消して、という地道な作業をしていた私
本当にPowershellありがてぇ(再)
ソースは色んな情報を検索しながらつなぎ合わせたので、これというページはなく
ぱっと分ったのがこちらだったと思う
PowershellによるCSVファイルからのデータ抽出:heboDJ.net
あとは知恵袋も見たしwいつものhttps://stackoverflow.com/やhttps://learn.microsoft.comも見た