필터 효율을 향상시키는 방법

필터 효율을 향상시키는 방법

MSSQL 데이터베이스의 사용자 목록과 비활성화된 AD 사용자 목록을 비교하는 스크립트를 만들었습니다. AD 인증용 도구는 다음 형식(열 사이에 더 많은 공백 포함)으로 데이터를 반환하므로 (파이썬에서) 비교를 허용하려면 데이터를 구문 분석해야 합니다.

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)
}'

답변2

sed어쨌든 사용하고 있으므로 정확하게 다음을 수행해야 합니다 .

/opt/util/enum-users --level 2 |
sed -n '/^Name:/h;//,/^Account/{
    /^Account/!d;/TRUE[^:]*$/!d;g
    s/^[^:]*:[[:blank:]]*//p
}' 

실제로 비즈니스를 어떻게 처리해야 하는지는 모르지만 [[:blank:]]위에서 가정한 바에 따르면 흥미로운 라인 그룹은 다음과 같이 시작할 수 있습니다.

^Name:[[:blank:]]*[INFORMATION YOU WANT]$

...그리고 다음 행은 문자열로 시작합니다.계정문자열로 끝나야 함진짜그 뒤에 공백이 여러 개 있으면 지루한 그룹이 있을 수 있습니다.잘못된또는 다른 것.

관련 정보