dscl . -readall /Users 

выводит что-то вроде этого (только часть всего вывода):

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

У меня есть эта команда:

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

Он в основном выводит все RecordName с уникальным идентификатором выше 500.

Я также хочу напечатать RealName, UserShell, RecordType, PrimaryGroupID и, возможно, любую другую категорию, если UniqueID больше 500, но у меня есть некоторые трудности с синтаксисом awk.

Как бы я поступил так?

Некоторые примеры выходных данных:

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

Формат, к которому я могу быстро получить доступ для чтения и помещения в переменную для программы.

1 ответ1

0

К сожалению, у меня нет абсолютно никакого опыта с OSX или утилитой dscl . Однако у меня есть некоторый опыт в awk . Я также быстро прочитал dscl страницу по dscl, посмотрев на опцию readall :

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.

Вы можете изменить способ, которым awk обрабатывает записи. Это распечатает записи, где уникальный идентификатор больше или равен 500:

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

У вас есть ожидаемый формат вывода?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .