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

各 dn を解析するようにシェル スクリプトを構成するにはどうすればよいですか: passwordexpirationtime の値を確認し、現在の日付と比較します。10 日未満の場合、mail 属性の値にメールを送信しますか?

属性の値を検索するとgrep passwordexpirationtime |awk -F ':' '{print $2}'、すべての dn: の値が返されます: どのメール: がどの dn: に関連付けられているかを知る方法は?

4

4 に答える 4

1

入力を異なるセパレーターで分割するよう awk に指示できます。

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

そうすれば、レコードをブロックとして分割し、フィールドを行として分割し、各レコードの 3 番目のフィールドを取得し、日付を削除して比較できます。

しかし、日付を確認する Python スクリプトがある場合は、すべて Python で実行してみませんか?

于 2011-12-27T13:50:58.787 に答える
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 に答える
0

次のようにテキストを変換できます。

メール: user1@example.com passwordexpirationtime: 20120113203000Z

メール: user2@example.com passwordexpirationtime: 20120113203000Z

メール: user3@example.com passwordexpirationtime: 20120113203000Z

次のスクリプトを使用します。

猫ldif.txt | tr '\n' '|' | | sed 's/||/\n/g' | awk -F"|" '{print $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 に答える