🍙
PowerShellでExcelのVLookUpっぽいことをしたい
やりたいこと
以下のようなファイルがあったとして、
sample2.csv
"foo",100,data1
"bar",200,data2
"hoge",300,data3
一列目に該当する行の2列目を表示したい。
例えばbar
を検索対象としたらdata2
を表示したい。
イメージ
> myVLookUP .\sample2.csv "bar" 2
data2
スクリプト例
myVLookUP.ps1
Function vlookup($filename, $pattern, $num)
{
$A = Select-String -Pattern $pattern $filename
$B = $A.toString().Split(",");
$B[$num]
}
vlookup .\sample2.csv "bar" 2
実行結果は以下
> .\myVLookUp.ps1
data2
Functionについて
Functionの書き方はドキュメントに記載があります。
補足(Get-Member)
今回作成したスクリプトで関数内で$A
, $B
を使用しています。
myVLookUP.ps1
Function vlookup($filename, $pattern, $num)
{
$A = Select-String -Pattern $pattern $filename
$B = $A.toString().Split(",");
$B[$num]
}
vlookup .\sample2.csv "bar" 2
これらのメンバにどんなものがあるかは
Get-Member を使うとわかります。たとえば$A
のメンバを見てみると、
以下のように表示されます。
> $A = Select-String -Pattern "bar" .\sample2.csv
> $A | Get-Member
TypeName: Microsoft.PowerShell.Commands.MatchInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
RelativePath Method string RelativePath(string directory)
ToString Method string ToString(), string ToString(string directory)
Context Property Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename Property string Filename {get;}
IgnoreCase Property bool IgnoreCase {get;set;}
Line Property string Line {get;set;}
LineNumber Property int LineNumber {get;set;}
Matches Property System.Text.RegularExpressions.Match[] Matches {get;set;}
Path Property string Path {get;set;}
Pattern Property string Pattern {get;set;}
Discussion