特定の識別子リストの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

#or

~$ 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

上記の質問の問題の1つは、OPの入力例で提供される最も長い行が13文字にすぎないことです。上記のコードは、各入力行に対して1行の戻り値を提供します。-neRakuの「非自動印刷コマンドラインフラグ」を使用してください。この$_変数はRaku(およびPerl)の「テーマ変数」です。 Rakuの文は終了行をprint追加しません。\nput

必要に応じて追加の「サブスクライバを削除」行を追加するように上記の出力を変更します。

https://docs.raku.org/言語/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
$

次に、機能しない場合など、より代表的な入出力の例を提供するように質問を編集します。

関連情報