我有一个包含以下内容的文件,其中几行的长度为 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
$
然后编辑您的问题以提供更具代表性的示例输入/输出,包括不起作用的情况。