2016-08-12 5 views
1

これは手間がかかりました。私はいくつかのユーザーDNを持つテキストファイルを持っていて、LogonHoursパターン(PowerShellを使用してActive Directoryから抽出したもの)を持つマトリックスをそれぞれ1つ以下にしています。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 

特定のLogonHoursパターンを使用してAWKでユーザー名を抽出するにはどうすればよいですか?

私は次のようにRSとして「パターンファイル」を使用してAWKを使用して、特定のパターンの数をカウントすることができました。次の内容のpatternfileを使用して

awk -v RS="$(<patternfile.txt)" '{print RT}' logonhoursCNlist.txt | grep "Week M-3" | wc -l 

期待される結果...

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 

が...このようなCNSに対する単なるユーザ名、次のとおりです。

John Doe 

すべてのヘルプIありがとう!

+0

「パターンファイル」をRS_として使用してAWKを使用して特定のパターンの数を数える方法を投稿してください。 –

+0

@JamesBrown: awk -v RS = "$( {print RT} 'logonhoursource.txt | grep "Week M-3" | wc -l "patternfile.txt"は、logonhoursource.txtから抽出されたDNの間の部分だけです。 –

+0

あなたの入力のどこにでも 'DN 'というテキストは表示されません。あなたはCNを意味しますか?そうでない場合は、 'DN 'が何であるかを明確にしてください。あなたの略語がわからないと仮定しないでください。重大:[編集]あなたの質問は、その入力を与えられた期待される出力を含める。 –

答えて

1

それはのようなものだろう(テストされていないが、あなたが望んでいない、まさに場合に非常に近くなります):

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

は、上記マルチchar型のRSとgensubのためのGNU AWKを使用しています()。

+0

私は、このgensubがユーザーリスト(RS varに保存されている参照マトリックスの代わりに「All Hours」属性を持つユーザー)の最後のレコードも返すことを認識しました。何か案が?よろしく! –

+0

RSは何にもマッチしてはいけません。それが設定されているかどうかを確認するために 'RT'を印刷してみてください。あなたのパターンファイルが、完全に一致させる文字列であることを確認してください。すべての空白とインデントを含みます。それはあなたの既存のスクリプトのために働く場合、それはしかし、この1つのために動作するはずです。実際には、gensub()を実行する前にRTのテストを追加するためにそれを微調整する必要があります。 –

+1

あなたは最高です。どうもありがとうございました! –

関連する問題