Perl 조인을 사용하여 각 일치 항목에 항목을 올바르게 추가할 수 없습니다. "작업자가 예상한 위치에서 배열을 찾았습니다" 오류가 발생합니다.

Perl 조인을 사용하여 각 일치 항목에 항목을 올바르게 추가할 수 없습니다. "작업자가 예상한 위치에서 배열을 찾았습니다" 오류가 발생합니다.

나는 다음과 같은 로그 라인을 가지고 있습니다 -

/mnt/internal-app/logs/internal-app.log_2019-08-21.log.gz:2019-08-21 07:31:14,153 5458142 [XNIO-3 task-4] INFO  c.c.p.i.m.ws.FileManger [FileName.java:1838] - UUIDs in this bucket 8501792126581991569,8073766106536916628,4830289023695906800,6135982080116553120,8306484440313978157,9040948912536460872,8471856544054164043,5431263453539111247,7661719762428556576
/mnt/internal-app/logs/internal-app.log_2019-08-21.log.gz:2019-08-21 07:31:14,153 5458144 [XNIO-3 task-4] INFO  c.c.p.i.m.ws.FileManger [FileName.java:1838] - UUIDs in this bucket 6501792126581991569,8073766106536916628,4830289023695906800,6135982080116553120,8306484440313978157,9040948912536460872,8471856544054164043,5431263453539111247,7661719762428556576

나는 UUID를 얻고 각 UUID를 큰따옴표로 묶기 위해 cat의 출력에서 ​​Perl을 사용하고 있습니다.

cat eligible_uuids_final_app1.txt | perl -ne 'chomp;if(s/^.*UUIDs in this bucket //){@uuids=split(/,/); print "," , join ",",map{qq/"$_"/} @uuids; }'

얻다-

"9556896620363267700","7159125371810704365"

또한 첫 번째 괄호에 개별적으로 넣고 싶습니다. 저는 Perl 전문가는 아니지만 여는 괄호를 추가할 수 있었습니다.

cat eligible_uuids_final_app1.txt | perl -ne 'chomp;if(s/^.*UUIDs in this bucket //){@uuids=split(/,/); print "," , join ",(",map{qq/"$_"/} @uuids; }'

얻다-

("9556896620363267700",("7159125371810704365"

꼬리 괄호를 추가해 보세요 -

cat eligible_uuids_final_app1.txt | perl -ne 'chomp;if(s/^.*UUIDs in this bucket //){@uuids=split(/,/); print "," , join ",(",map{qq/"$_"/}, join ,")" @uuids;  }'

구문 오류가 발생했습니다 -

$ cat eligible_uuids_final_app1.txt | perl -ne 'chomp;if(s/^.*UUIDs in this bucket //){@uuids=split(/,/); print "," , join ",(",map{qq/"$_"/}, join ,")" @uuids;  }'
Array found where operator expected at -e line 1, near "")" "
    (Missing operator before  ?)
syntax error at -e line 1, near "},"
Execution of -e aborted due to compilation errors.

답변1

네가 원한다면요소를 대괄호와 따옴표로 묶으면 기존 map블록에 간단히 추가할 수 있습니다.

map{qq/"$_"/}

통과

map{qq/"($_)"/}

답변2

의 각 요소 사이에 (,배치되는 - 로 배열 요소를 연결하고 싶지 않습니다 .(,@uuids

(연결하기 전에 a를 인쇄하고 연결한 후에 a를 인쇄 하면 됩니다 ).

예를 들어 다음을 사용합니다 printf.

$ perl -ne '
  chomp;
  if(s/^.*UUIDs in this bucket //) {
    @uuids=split(/,/);
    printf ",(%s)", join ",",map{qq/"$_"/} @uuids;
  }' eligible_uuids_final_app1.txt
,("8501792126581991569","8073766106536916628","4830289023695906800","6135982080116553120","8306484440313978157","9040948912536460872","8471856544054164043","5431263453539111247","7661719762428556576"),("6501792126581991569","8073766106536916628","4830289023695906800","6135982080116553120","8306484440313978157","9040948912536460872","8471856544054164043","5431263453539111247","7661719762428556576")

(읽을 수 있도록 한 줄에 줄바꿈을 추가하세요)

(...)내부 또는 외부에 쉼표를 넣고 싶은지 잘 모르겠습니다 . 나는 그것이 전자라고 가정하고 있습니다. 필요에 따라 printf 형식 문자열을 조정합니다.

줄 바꿈(예 printf ",(%s)\n", ....;: )을 추가할 수 있습니다.

관련 정보