2016-08-12 51 views
1

這是一個棘手的問題:我有一個包含多個用戶DN的文本文件,並且每個都有一個帶LogonHours模式的矩陣(使用PowerShell從Active Directory中提取)。看起來像這樣:如何使用AWK過濾用戶CN的矩陣模式?

CN=John Doe,OU=Users,OU=Almox,DC=acme,DC=inc 
    Day 
    of --------- Daily Hours -------- 
    Week M-3 3-6 6-9 9-N N-3 3-6 6-9 9-M 
    Dom 000 000 000 000 000 000 000 000 
    Seg 000 000 011 111 111 111 100 000 
    Ter 000 000 011 111 111 111 100 000 
    Qua 000 000 011 111 111 111 100 000 
    Qui 000 000 011 111 111 111 100 000 
    Sex 000 000 011 111 111 111 100 000 
    Sab 000 000 000 000 000 000 000 000 
CN=Jack Dumb,OU=Users,OU=Managers,DC=acme,DC=inc 
    All Hours 
CN=Barry Foo,OU=Disabled Users,DC=acme,DC=inc 
    Day 
    of --------- Daily Hours -------- 
    Week M-3 3-6 6-9 9-N N-3 3-6 6-9 9-M 
    Dom 000 000 000 000 000 011 111 111 
    Seg 111 111 111 111 111 111 111 111 
    Ter 111 111 111 111 111 111 111 111 
    Qua 111 111 111 111 111 111 111 111 
    Qui 111 111 111 111 111 111 111 111 
    Sex 111 111 111 111 111 111 111 111 
    Sab 111 111 111 111 110 000 000 000 

我怎樣才能提取具有AWK特定LogonHours模式的用戶名?

我能數的使用AWK使用「模式文件」作爲RS如下特定圖案數量:

awk -v RS="$(<patternfile.txt)" '{print RT}' logonhoursCNlist.txt | grep "Week M-3" | wc -l 
使用具有以下內容的patternfile

預期結果......

Day 
of --------- Daily Hours -------- 
Week M-3 3-6 6-9 9-N N-3 3-6 6-9 9-M 
Dom 000 000 000 000 000 000 000 000 
Seg 000 000 011 111 111 111 100 000 
Ter 000 000 011 111 111 111 100 000 
Qua 000 000 011 111 111 111 100 000 
Qui 000 000 011 111 111 111 100 000 
Sex 000 000 011 111 111 111 100 000 
Sab 000 000 000 000 000 000 000 000 

...只是對中樞神經系統的用戶名,如:

John Doe 

任何幫助我將不勝感激!

+0

請發表您如何使用AWG使用「模式文件」作爲RS_來計算特定模式的數量? –

+0

@JamesBrown: awk -v RS =「$(

+0

我在輸入中的任何地方都看不到文字「DN」。你的意思是'CN'?如果不是,請說明「DN」是什麼,不要以爲我們熟悉縮寫。至關重要的:[編輯]你的問題,包括輸入的預期輸出。 –

回答

1

它會是這樣的(未經測試,但如果沒有你想要的東西會非常接近):以上

awk -v RS="$(<patternfile.txt)" 'RT!=""{print gensub(/.*CN=([^,]+).*/,"\\1",1)}' logonhoursCNlist.txt 

使用GNU AWK多焦RS和gensub()。

+0

我剛剛意識到這個gensub也返回了我的用戶列表中的最後一條記錄(具有「所有小時數」屬性的用戶而不是存儲在RS var上的參考矩陣)。任何想法?問候! –

+0

RS不能匹配任何東西。嘗試打印'RT'來查看它是否被設置?確保你的模式文件完全是你想要匹配的字符串,包括所有的空格和縮進。如果它適用於你現有的腳本,那麼它應該適用於這個。實際上,我應該調整它以在運行gensub()之前爲RT添加一個測試,現在我會這樣做。 –

+1

該死的你真棒。非常感謝你! –