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")

(読みやすいように1行に改行を追加してください)

(...)内部または外部にカンマを入れたいかどうかはわかりません。私はそれが電子だと仮定しています。必要に応じてprintf形式の文字列を調整します。

改行(たとえばprintf ",(%s)\n", ....;)を追加できます。

関連情報