Как добавить кавычки к значениям полей переноса строки в файле

Как добавить кавычки к значениям полей переноса строки в файле

Входной файл, содержащий две записи и три поля, второй атрибут содержит символы новой строки. Я хочу заключить каждое значение поля в двойные кавычки.

Входной файл:

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

Требуемый вывод должен быть таким, как показано ниже

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

решение1

Вы можете попробовать это с помощью awk:

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

решение2

Вы можете сделать это с помощью perl:

perl -0pe 's/([^|]*)\|([^|]*)\|([^|\n]*)(\n|$)/"\1"|"\2"|"\3"\4/g' input_file
  • -0читать файл сразу, а не построчно.
  • -pвывести строку в конце
  • -eвыражение
  • s/pattern/replacement/gЗаменить шаблон на замену

решение3

$ cat input.txt | tr "\n" "\t" \
  |awk -v FS="|" -v OFS="|" '{for(i=1;i<=NF;i++) $i="\""$i"\"";}1' \
  |tr "\t" "\n"
  • trпреобразовать новую строку в табуляцию. Таким образом, ввод линеаризуется
  • Мы говорим, awkчто нужно обрабатывать |как разделитель полей. Теперь мы можем перебрать каждое поле и добавить кавычки вокруг. После этого вся строка будет напечатана
  • trпреобразует вкладку обратно в новую строку

Связанный контент