次の内容を含むファイルがあります。数行の長さは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行の戻り値を提供します。-ne
Rakuの「非自動印刷コマンドラインフラグ」を使用してください。この$_
変数はRaku(およびPerl)の「テーマ変数」です。 Rakuの文は終了行をprint
追加しません。\n
put
必要に応じて追加の「サブスクライバを削除」行を追加するように上記の出力を変更します。
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
$
次に、機能しない場合など、より代表的な入出力の例を提供するように質問を編集します。