2011-12-27 31 views
2

我有一個像這樣的LDIF數據庫。我該如何配置一個shell腳本來解析每個dn的ldif格式的ldap數據:

dn: uid=user1,ou=People,dc=example,dc=com 
mail: [email protected] 
passwordexpirationtime: 20120113203000Z 

dn: uid=user2,ou=People,dc=example,dc=com 
mail: [email protected] 
passwordexpirationtime: 20120113203000Z 

dn: uid=user3,ou=People,dc=example,dc=com 
mail: [email protected] 
passwordexpirationtime: 20120113203000Z 

如何配置shell腳本來解析每個dn:檢查passwordexpirationtime的值,並將其與當前日期進行比較。如果少於10天,然後發送郵件的價值在郵件屬性?

如果我通過grep passwordexpirationtime |awk -F ':' '{print $2}'搜索屬性的值它將爲所有的dn返回值:我怎麼會知道哪個郵箱:

回答

0

你可以改變這樣的文字:

是由DN相關郵箱:[email protected] passwordexpirationtime:20120113203000Z

郵箱:[email protected] passwordexpirationtime:20120113203000Z

郵箱:[email protected] passwordexpirationtime:20120113203000Z

使用此腳本:

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

+0

精彩,我可以做{打印$ 1,$ 2,$ 3}&然後閱讀使用awk來讀取passwordexpirationtime的價值,補償是否與今天(我有一個相同的Python腳本。)如果1來使用郵件屬性和發送郵件。否則移動第二個記錄。非常感謝今晚將嘗試這一點,並更新結果。 – user1116993 2011-12-27 08:24:38

1

你可以告訴AWK通過不同的分隔符分割輸入:

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

這樣,它會分裂記錄爲塊和領域線,那麼你就可以獲取每條記錄的第三個字段,去掉日期並進行比較。

但如果你有一個python腳本來檢查日期,爲什麼你不用python做這一切?

+0

是的,使用awk會更容易.dat ldif.txt | awk'BEGIN {RS =「\ n \ n」; FS =「\ n」} {print $ 1}' – tinychen 2011-12-28 02:49:57

+0

[uuoc](https://en.wikipedia.org/wiki/Cat_(Unix)#Useless_use_of_cat):( – 2011-12-28 03:41:29

+0

Python - 因爲我對編程知之甚少,根據我的需要複製/粘貼和更改@tinychen你的想法奏效了,我會試試awk thingy ..謝謝大家。 – user1116993 2011-12-28 13:42:58

0

這可能會爲你工作:

awk '{print $4,$6}' RS='' ldif.txt 
[email protected] 20120113203000Z 
[email protected] 20120113203000Z 
[email protected] 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 
0

這裏是Python中的解決方案,因爲這似乎是您使用的語言:

with open('ldif.txt') as f: 
    for line in f: 
     if line.startswith('passwordexpirationtime'): 
      _, date = line.split(': ') 
      print date 
相關問題