过滤“dscl -readall”命令的输出

过滤“dscl -readall”命令的输出
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}'

它基本上输出所有 UniqueID 高于 500 的 RecordName。

如果 UniqueID 大于 500,我还想打印 RealName、UserShell、RecordType、PrimaryGroupID 以及可能的任何其他类别,但我对 awk 的语法有些困难。

我该如何做这件事?

一些示例输出:

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

我可以快速访问的一种格式,用于读取并放入程序变量中。

答案1

OSX不幸的是,我对该实用程序没有任何经验dscl。不过我确实有一些awk经验。我也快速阅读了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。这将打印出 UniqueID 大于或等于 500 的记录:

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

您有预期的输出格式吗?

相关内容