2010/03/21

データ整形


この時期は、新年度を控えていてデータ整理だとかをしなきゃいけなかったりする。
Dsquery user コマンドを使うことで、ADのユーザーオブジェクトを取得することができる。
サンプルとして下記ユーザーデータ userlist.txtを取得できたとする。

CN=1,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=2,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=3,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=4,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=5,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=6,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=7,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=8,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=9,ou=Tokyo,dc=ad-domain,dc=company,dc=local
CN=10,ou=Tokyo,dc=ad-domain,dc=company,dc=local

このアカウント(CN)の1文字目の数字から偶数・奇数 へと分ける。
さらにアカウント以外の余分なパスを削って、という指示。
PowerShellが出たことで、
Windows管理者といえどスクリプトをある程度は使いこなさないといけない時代がきてますよね。
僕はスクリプト書くのは好きなほうなんですが
いかんせん普段から使っているわけでないので発想に乏しいというかなんというか・・。

ちなみに、新人の子がとった手法はこちら。

grep =0 userlist.txt | cut -d , -f 1 | cut -d = -f 2 | cat >> Even
grep =1 userlist.txt | cut -d , -f 1 | cut -d = -f 2 | cat >> Odd
grep =2 userlist.txt | cut -d , -f 1 | cut -d = -f 2 | cat >> Even
grep =3 userlist.txt | cut -d , -f 1 | cut -d = -f 2 | cat >> Odd
 grepの検索を10回分 手動でかえてあげる必要はあるものの、あとはうまく切り取ってる。
早く結果を出力するのがなんぼなので力技でやったにせよ、よく考えたなぁと。
そして僕はというと・・。
PS .\sample> $regex1 = "^.*=([13579].*)(,OU=Tokyo)"
PS .\sample> gc .\userlist.txt | Select-String -Pattern $regex1 -AllMatches `
>> | foreach { $_.matches[0].groups[1].value }
>>
1
3
5
7
9
10
正規表現での抽出にばかり目が行って、出力されるはされたけれどわかりづらい・・。
新人の子と僕のを組み合わせた方式がてっとりばやくてわかりよいか。
PS .\sample> Select-String -Pattern "=[02468]" .\userlist.txt | `
>> foreach { $($_ -split ",")[0] } | foreach { $($_ -split "=")[1] } | sort
>>
2
4
6
8
積極的に実務にPowerShell使っていきたいー。

スポンサーリンク

スポンサーリンク