アニメ『最遊記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


コメント