如何使用AWK过滤用户CN的矩阵模式?

时间:2016-08-12 12:03:28

标签: bash awk

这个很棘手:我有一个包含多个用户DN的文本文件,每个文件下面都有一个带有LogonHours模式的矩阵(使用PowerShell从Active Directory中提取)。看起来像这样:

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

使用具有以下内容的模式文件的预期结果......

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上的用户名,如下所示:

John Doe

我会感激的任何帮助!

1 个答案:

答案 0 :(得分:1)

它是类似的(未经测试但如果不是你想要的话会非常接近):

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

以上使用GNU awk进行多字符RS和gensub()。