Como tornar um filtro mais eficiente

1

Eu criei um script para comparar uma lista de usuários de um banco de dados MSSQL com uma lista de usuários do AD desabilitados. A ferramenta que usamos para autenticação do AD retorna dados no seguinte formato (com muito mais espaço em branco entre as colunas), então, para permitir a comparação (em python), os dados precisam ser analisados:

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

Na linha de comando, o seguinte faz o truque, mas é muito confuso e espero que alguém possa sugerir um método mais limpo. Eu experimentei o awk, mas não tive muito sucesso em reduzir o tamanho do comando:

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

Isso gera os dados conforme necessário:

username
username
etc
    
por Paul Dundee 05.01.2015 / 12:49

2 respostas

1

Não sei se é mais eficiente, mas você pode fazer isso totalmente em awk :

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

Você deve fazer isso com sed totalmente, já que você está usando mesmo assim:

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

Na verdade, não sei como o [[:blank:]] negócios deve ser tratado, mas a suposição feita acima é que um grupo de linhas interessante provavelmente começará assim:

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

... e que a próxima linha que começa com a string Conta deve terminar com a string TRUE seguida por qualquer número de espaços em branco e que um grupo não interessante provavelmente tem FALSE ou algo assim.

    
por 06.01.2015 / 00:50