アニメ『最遊記RELOAD BLAST』
気の合う仲間っていいですね。みんな強いし。 第3シーズンとは知らず見てしまいました。途中からも楽しめる話になってるんですね。
第1シーズンから見ようと思いました。
(本記事はPowerShell入門記事としてコチラにもまとめています。)
仲間ということで、joinです。仲間に加わる意味ですが、Unix/Linuxのjoinコマンドは指定列の同一項目を結合してくれるコマンドです。
これを、PowerShellでもやってみたいと思います。
まずjoinする元のファイルを適当に作ります。
PS C:\Users\takk\aaa> 1..10 | %{ "{0:d1}`t{1:d1}" -f $_ , $(random)} > file1 PS C:\Users\takk\aaa> 3,4,5 | %{ "{0:d1}`t{1:d1}" -f $_ , $(random)} > file2
それぞれの内容です。
PS C:\Users\takk\aaa> cat file1 1 497585595 2 1980261099 3 182124860 4 1085555943 5 1382725001 6 381820766 7 500921000 8 361022721 9 131614824 10 1843791556 PS C:\Users\takk\aaa> cat file2 3 1421951741 4 1254637545 5 1604066056 PS C:\Users\takk\aaa>
1列目の情報でjoinしてみましょう。連想配列を使います。
PS C:\Users\takk\aaa> cat file2 | %{$hash=@{}}{$a,$b=$_.split("`t");$hash.add($a,$b)}{ cat file1 | %{$a,$b=$_.split("`t");"$_`t"+$hash["$a"]}} 1 497585595 2 1980261099 3 182124860 1421951741 4 1085555943 1254637545 5 1382725001 1604066056 6 381820766 7 500921000 8 361022721 9 131614824 10 1843791556 PS C:\Users\takk\aaa>
このままだと使いにくいので、関数にします。
PS C:\Users\takk\aaa> function join($file1,$file2){ >> cat $file2 | %{$hash=@{}}{$a,$b=$_.split("`t");$hash.add($a,$b)}{ >> cat $file1 | %{$a,$b=$_.split("`t");"$_`t"+$hash["$a"]}} >> } >> PS C:\Users\takk\aaa>
名前をjoinにしました。
join ファイル名 ファイル名
で実行すると、1列目の文字列が一致する行を結合します。
PS C:\Users\takk\aaa> join file1 file2 1 497585595 2 1980261099 3 182124860 1421951741 4 1085555943 1254637545 5 1382725001 1604066056 6 381820766 7 500921000 8 361022721 9 131614824 10 1843791556 PS C:\Users\takk\aaa> join file2 file1 3 1421951741 182124860 4 1254637545 1085555943 5 1604066056 1382725001 PS C:\Users\takk\aaa>
別のファイルを作って試してみましょう。
PS C:\Users\takk\aaa> 3,5,7 | %{ "$_`tBBBB`tCCCC"} > file3 PS C:\Users\takk\aaa> join file1 file3 1 497585595 2 1980261099 3 182124860 BBBB CCCC 4 1085555943 5 1382725001 BBBB CCCC 6 381820766 7 500921000 BBBB CCCC 8 361022721 9 131614824 10 1843791556 PS C:\Users\takk\aaa> join file1 file3
コメント