修改给定标识符列表的 LDAP 数据

修改给定标识符列表的 LDAP 数据

我有一个包含以下内容的文件,其中几行的长度为 15,而其余行的长度小于 15。

AAAAAAAAAAAAA
BBBBBBBB
cccc

我需要以下方式的输出。

删除订阅者:

AAAAAAAAAAAAA

IMSI=AAAAAAAAAAAAA,dc=imsi,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te

删除订阅者:BBBBBBBB

MSISDN=BBBBBBBB,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te

删除订阅者:cccc

MSISDN=cccc,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te

答案1

使用(以前称为 Perl_6)

您需要一个条件语句:

~$ raku -ne ' if ($_.chars == 15) {print "IMSI=$_,dc=imsi,"} else {print "MSISDN=$_,dc=msisdn,"}; put "ou=NPSD,serv=CSPS,ou=servCommonData,dc=te";'  file

#或者

~$ raku -ne '($_.chars == 15) ?? print "IMSI=$_,dc=imsi," !! print "MSISDN=$_,dc=msisdn,"; put "ou=NPSD,serv=CSPS,ou=servCommonData,dc=te";'  file  

输入示例(在顶部添加 15 个字符zzzzzzzzzzzzzzz):

zzzzzzzzzzzzzzz
AAAAAAAAAAAAA
BBBBBBBB
cccc

示例输出:

IMSI=zzzzzzzzzzzzzzz,dc=imsi,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te
MSISDN=AAAAAAAAAAAAA,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te
MSISDN=BBBBBBBB,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te
MSISDN=cccc,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te

上述问题的问题之一是 OP 示例输入给出的最长行只有 13 个字符。上面的代码为每一行输入提供了一行返回。-ne使用Raku 的“非自动打印命令行标志。该$_变量是 Raku 的(和 Perl 的)“主题变量”。Raku 的print语句不添加终止\n换行符,而 Raku 的put语句则添加。

根据需要修改上面的输出以添加额外的“删除订阅者”行。

https://docs.raku.org/language/control#index-entry-control_flow_if-if
https://docs.raku.org/routine/%3F%3F%20!
https://raku.org

答案2

鉴于您的问题中提供的示例输入:

$ head file?
==> file1 <==
AAAAAAAAAAAAA
BBBBBBBB
cccc

==> file2 <==
IMSI=AAAAAAAAAAAAA,dc=imsi,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te
MSISDN=BBBBBBBB,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te
MSISDN=cccc,dc=msisdn,ou=NPSD,serv=CSPS,ou=servCommonData,dc=te

如果这不是您所需要的,请使用任何 awk:

$ awk -F'[=,]' 'NR==FNR{bad[$0]; next} !($2 in bad)' file1 file2
$

然后编辑您的问题以提供更具代表性的示例输入/输出,包括不起作用的情况。

相关内容