这个很棘手:我有一个包含多个用户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
我会感激的任何帮助!
答案 0 :(得分:1)
它是类似的(未经测试但如果不是你想要的话会非常接近):
awk -v RS="$(<patternfile.txt)" 'RT!=""{print gensub(/.*CN=([^,]+).*/,"\\1",1)}' logonhoursCNlist.txt
以上使用GNU awk进行多字符RS和gensub()。