Filtrando a saída do comando "dscl -readall"

0
dscl . -readall /Users 

gera algo assim (apenas uma parte da saída inteira):

PrimaryGroupID: 20
RealName:
Johnny Smith
RecordName: johnny
RecordType: dsRecTypeStandard:Users
UniqueID: 501
UserShell: /bin/bash

Eu tenho este comando:

dscl . -readall /Users UniqueID | awk '/^RecordName:/ {name=$2}; /^UniqueID: / {if ($2 > 500) print name}'

Basicamente produz todos os RecordName's com um UniqueID superior a 500.

Eu também quero imprimir o RealName, UserShell, RecordType, PrimaryGroupID e possivelmente qualquer outra categoria se o UniqueID for maior que 500, mas estou tendo alguma dificuldade com a sintaxe do awk.

Como eu faria isso?

Alguns exemplos de saída:

<primarygroupid>20</primarygroupid> 
<realname>Johnny Smith</realname>
...
<uniqueid>501</uniqueid> 

Um formato que eu posso acessar rapidamente para ler e colocar em uma variável para um programa.

    
por John 12.10.2012 / 16:03

1 resposta

0

Infelizmente, não tenho absolutamente nenhuma experiência com OSX ou o utilitário dscl . No entanto, tenho uma experiência de awk . Também tive uma rápida leitura da página de manual dscl readall option:

Displays all the records of a given type. The output of readall is formatted in
the same way as read with a "-" on a line as a delimeter between records.

Você pode alterar a maneira como awk trata os registros. Isso imprimirá os registros em que o UniqueID é maior ou igual a 500:

awk -v RS="-" '{ for (i=1; i<=NF; i++) if ($i ~ /UniqueID:/ && $(i+1) >= 500) print $0 }'

Você tem um formato de saída esperado?

    
por 13.10.2012 / 08:16

Tags