フィルタ効率を向上させる方法

フィルタ効率を向上させる方法

MSSQLデータベースのユーザーリストと無効なADユーザーリストを比較するスクリプトを作成しました。 AD認証用のツールは、次の形式(列間のスペースをさらに含む)でデータを返すため(Pythonで)比較を許可するには、データを解析する必要があります。

User info (Level-2):
====================
Name:                         domain\username
UPN:                          [email protected]
Generated UPN:                NO
DN:                           DN....
Uid:                          123456
Gid:                          123456
Gecos:                        User Name
Shell:                        /shell/path
Home dir:                     /homedir
Other attributes:         ....
Other attributes:         ....
Account disabled (or locked): TRUE
Other attributes:         ....
Other attributes:         ....
Other attributes:         ....
etc

コマンドラインで次のアプローチを使用すると効果がありますが、非常に混乱しているので、誰かがよりきれいなアプローチを提案できることを願っています。私はawkを試しましたが、コマンドのサイズを減らすのに大きな成功を収めませんでした。

/opt/util/enum-users --level 2 |
grep "Name:\|Account disabled (or locked): TRUE" |
grep -x "Account disabled (or locked): TRUE" -B 1 |
grep "Name:" |
sed -r 's/^.{35}//'

すると、必要に応じてデータが出力されます。

username
username
etc

ベストアンサー1

より効率的かどうかはわかりませんが、正確に次のようにできますawk

awk -F': *' '$1 == "Name" {name = $2; next}; 
$0 == "Account disabled (or locked): TRUE" {
   print gensub(/.*\\/, "", 1, name)
}'

おすすめ記事