2

我有一个类似这样的 LDIF 数据库。

dn: uid=user1,ou=People,dc=example,dc=com
mail: user1@example.com
passwordexpirationtime: 20120113203000Z

dn: uid=user2,ou=People,dc=example,dc=com
mail: user2@example.com
passwordexpirationtime: 20120113203000Z

dn: uid=user3,ou=People,dc=example,dc=com
mail: user3@example.com
passwordexpirationtime: 20120113203000Z

如何配置 shell 脚本来解析每个 dn:检查 passwordexpirationtime 的值,将其与当前日期进行比较。如果少于 10 天,那么将邮件发送到邮件属性中的值?

如果我搜索属性的值,grep passwordexpirationtime |awk -F ':' '{print $2}'它将返回所有 dn 的值:我怎么知道哪个邮件:与哪个 dn 关联:

4

4 回答 4

1

你可以告诉 awk 用不同的分隔符分割输入:

BEGIN { RS="\n\n"; FS="\n" }

这样,它会将记录拆分为块,将字段拆分为行,然后您可以获得每条记录的第三个字段,剥离日期并进行比较。

但是如果你有一个 python 脚本来检查日期,为什么不直接在 python 中完成呢?

于 2011-12-27T13:50:58.787 回答
0

您可以像这样转换文本:

邮箱:user1@example.com 密码过期时间:20120113203000Z

邮箱:user2@example.com 密码过期时间:20120113203000Z

邮箱:user3@example.com 密码过期时间:20120113203000Z

使用这个脚本:

猫ldif.txt | tr '\n' '|' | sed 's/||/\n/g' | awk -F"|" '{打印 $2,$3}'

于 2011-12-27T08:04:59.423 回答
0

这是python中的一个解决方案,因为这似乎是您正在使用的语言:

with open('ldif.txt') as f:
    for line in f:
        if line.startswith('passwordexpirationtime'):
            _, date = line.split(': ')
            print date
于 2011-12-29T00:11:19.267 回答
0

这可能对您有用:

awk '{print $4,$6}' RS='' ldif.txt
user1@example.com 20120113203000Z
user2@example.com 20120113203000Z
user3@example.com 20120113203000Z

现在您所要做的就是添加一些日期算术,如下所示:

awk '{if(systime()+(10*24*60*60)-mktime(gensub(/(....)(..)(..)(..)(..)(..)(.)/,"\\1 \\2 \\3 \\4 \\5 \\6 \\7",1g,$6))>0)print $4}' RS='' ldif.txt
于 2011-12-28T08:29:13.870 回答