アニメ『恋と嘘』
政府が決めた相手と結婚しなければいけない制度の世界なんですが、割と良い制度なんじゃないかなあと思います。本当に最良の相手となるならですが。
(本記事はPowerShell入門記事としてコチラにもまとめています。)
今回は2つのファイル群を作って、内容が一致するものがどれぐらいあるか確認してみます。
ファイルの内容は1~5の数字の組み合わせで作ります。
PS C:\Users\takk\aaa> function 5num(){
>> 1..5 | %{random -min 1 -max 5}
>> }
>>
PS C:\Users\takk\aaa> 5num
4
1
3
1
4
PS C:\Users\takk\aaa>
まず一つ目のファイル群としてdir1を作ってファイルを100個作ります。
PS C:\Users\takk\aaa\dir1> 1..100 | % {$n=1}{5num > file_$n; $n++}
PS C:\Users\takk\aaa\dir1>
ファイルが100個生成されます。
PS C:\Users\takk\aaa\dir1> (ls -name)[0..9] file_1 file_10 file_100 file_11 file_12 file_13 file_14 file_15 file_16 file_17 PS C:\Users\takk\aaa\dir1>
ファイルの内容はそれぞれ異なります。
PS C:\Users\takk\aaa\dir1> (ls -name | %{echo ===$_===;cat $_})[0..9]
===file_1===
1
2
2
2
2
===file_10===
1
3
4
PS C:\Users\takk\aaa\dir1>
これをもう一つ作ります。
PS C:\Users\takk\aaa\dir2> 1..100 | % {$n=1}{5num > file_$n; $n++}
PS C:\Users\takk\aaa\dir2>
各フォルダにあるファイルのMD5を確認してみましょう。10ファイル分のみ表示しています。
dir1から。
PS C:\Users\takk\aaa> (ls dir1 -file | %{get-filehash -A MD5 dir1/$_})[0..9]
Algorithm Hash Path
--------- ---- ----
MD5 349FE18B709737FF903B301A8D5809AB C:\Users\takk\aaa\dir1\file_1
MD5 4C710F3E92557BABA923F47C866DEA05 C:\Users\takk\aaa\dir1\file_10
MD5 93172F647FBDEF3634C9242A8053C35D C:\Users\takk\aaa\dir1\file_100
MD5 B882146EF4FBBBC0DDC759FBEB34B69C C:\Users\takk\aaa\dir1\file_11
MD5 C9467816275EAE1A54DE45FE6DDB02AE C:\Users\takk\aaa\dir1\file_12
MD5 AE2933E92ECB3CAEC642A74546833B2A C:\Users\takk\aaa\dir1\file_13
MD5 4DF661A8583B2FB04E9E3E400EC02ADA C:\Users\takk\aaa\dir1\file_14
MD5 BC7F41F1B446E09C464F954EA5D86CCA C:\Users\takk\aaa\dir1\file_15
MD5 7F101CC43794720C7EAA678DC3F3BAB6 C:\Users\takk\aaa\dir1\file_16
MD5 5A60F517FA7C678B158C8CC21CAB27C0 C:\Users\takk\aaa\dir1\file_17
PS C:\Users\takk\aaa>
PS C:\Users\takk\aaa> (ls dir2 -file | %{get-filehash -A MD5 dir2/$_})[0..9]
Algorithm Hash Path
--------- ---- ----
MD5 323D55B920AEA935F72B45210C8F1DDE C:\Users\takk\aaa\dir2\file_1
MD5 D081F8BFA19B4E3D4B6C024FD3D47B12 C:\Users\takk\aaa\dir2\file_10
MD5 C3E2624D47BBDA6E0AB9516DA993B8F1 C:\Users\takk\aaa\dir2\file_100
MD5 18AE851073AC7A8E1BD9DB693CE4869C C:\Users\takk\aaa\dir2\file_11
MD5 698A011B551CBD80B7D03703CAA214FD C:\Users\takk\aaa\dir2\file_12
MD5 F7F795DB9BC48816F20970AF0A98C92D C:\Users\takk\aaa\dir2\file_13
MD5 11BEC7147D833D0AE3F5A6C3919CAD82 C:\Users\takk\aaa\dir2\file_14
MD5 9D3274BCB6A4FFB288AF03AB7F876A11 C:\Users\takk\aaa\dir2\file_15
MD5 A77636F22FE1124EC21A4F6501D8C540 C:\Users\takk\aaa\dir2\file_16
MD5 81B90CE24BE723830422C977BB6DA7BD C:\Users\takk\aaa\dir2\file_17
PS C:\Users\takk\aaa>
当然総数は200となります。
PS C:\Users\takk\aaa> (ls -name -re -file | %{(get-filehash -A MD5 $_).hash}).Count
200
PS C:\Users\takk\aaa>
重複していない数を調べます。
PS C:\Users\takk\aaa> (ls -name -re -file | %{(get-filehash -A MD5 $_).hash} | sort | get-unique).Count
183
PS C:\Users\takk\aaa>
183個あったので、重複しているMD5は17個となります。
奇数個あるので、つまり2つずつのセットにはできないですね。
ファイルも合わせて確認するとわかりますが、
PS C:\Users\takk\aaa> ls -name -re -file | %{"{0:s} {0:s}" -f (get-filehash -A MD5 $_).hash ,$_} | sort
C9467816275EAE1A54DE45FE6DDB02AE dir1\file_12
C9467816275EAE1A54DE45FE6DDB02AE dir1\file_52
同じdir1フォルダに一致する内容のファイルがありました。
なるほど、一致するのは同性の場合もあるんですね。


コメント