Como adicionar aspas aos valores dos campos de quebra de linha em um arquivo

Como adicionar aspas aos valores dos campos de quebra de linha em um arquivo

Arquivo de entrada com dois registros e três campos, o segundo atributo contém caracteres de nova linha. Quero colocar cada valor de campo entre aspas duplas.

Arquivo de entrada:

100|Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce|2019-01-24
200|Minimum amount not avialable in your account.
Last time deposited amonut month ago|2019-01-24

A saída necessária deve ser como abaixo

"100"|"Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce"|"2019-01-24"
"200"|"Minimum amount not avialable in your account.
Last time deposited amonut month ago"|"2019-01-24"

Responder1

Você pode tentar com este awk:

awk -F'\n' '!f{$1="\""$1;f=1}{f=f+gsub("[|]","\"|\"")}f==3{$0=$0"\"";f=0}1' infile

Responder2

Você pode fazer isso com perl:

perl -0pe 's/([^|]*)\|([^|]*)\|([^|\n]*)(\n|$)/"\1"|"\2"|"\3"\4/g' input_file
  • -0leia o arquivo de uma vez, não linha por linha.
  • -pimprima a linha no final
  • -ea expressão
  • s/pattern/replacement/gSubstituir padrão por substituição

Responder3

$ cat input.txt | tr "\n" "\t" \
  |awk -v FS="|" -v OFS="|" '{for(i=1;i<=NF;i++) $i="\""$i"\"";}1' \
  |tr "\t" "\n"
  • trtransforme a nova linha em uma guia. Então a entrada é linearizada
  • Dizemos awkpara tratar o |como um separador de campo. Agora podemos iterar em cada campo e adicionar aspas. Depois toda a linha é impressa
  • trconverte a tabulação de volta para uma nova linha

informação relacionada