
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
-0
leia o arquivo de uma vez, não linha por linha.-p
imprima a linha no final-e
a expressãos/pattern/replacement/g
Substituir 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"
tr
transforme a nova linha em uma guia. Então a entrada é linearizada- Dizemos
awk
para tratar o|
como um separador de campo. Agora podemos iterar em cada campo e adicionar aspas. Depois toda a linha é impressa tr
converte a tabulação de volta para uma nova linha