Cómo agregar comillas a los valores de los campos de salto de línea en un archivo

Cómo agregar comillas a los valores de los campos de salto de línea en un archivo

El archivo de entrada tiene dos registros y tres campos, el segundo atributo contiene caracteres de nueva línea. Quiero encerrar cada valor de campo entre comillas dobles.

Fichero 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

El resultado requerido debería ser como el siguiente

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

Respuesta1

Puedes probar con este awk:

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

Respuesta2

Puedes hacerlo con perl:

perl -0pe 's/([^|]*)\|([^|]*)\|([^|\n]*)(\n|$)/"\1"|"\2"|"\3"\4/g' input_file
  • -0Lea el archivo a la vez, no línea por línea.
  • -pimprimir la línea al final
  • -ela expresion
  • s/pattern/replacement/gReemplazar patrón con reemplazo

Respuesta3

$ cat input.txt | tr "\n" "\t" \
  |awk -v FS="|" -v OFS="|" '{for(i=1;i<=NF;i++) $i="\""$i"\"";}1' \
  |tr "\t" "\n"
  • trtransformar nueva línea en una pestaña. Entonces la entrada está linealizada.
  • Le decimos awkque maneje el |como separador de campo. Ahora podemos iterar sobre cada campo y agregar comillas. Después se imprime toda la línea.
  • trconvierte la pestaña nuevamente a una nueva línea

información relacionada