다음 내용이 포함된 파일이 있습니다. 몇 줄의 길이는 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
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
$
그런 다음 작동하지 않는 경우를 포함하여 보다 대표적인 입력/출력 예제를 제공하도록 질문을 편집하십시오.