
Входной файл, содержащий две записи и три поля, второй атрибут содержит символы новой строки. Я хочу заключить каждое значение поля в двойные кавычки.
Входной файл:
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
преобразует вкладку обратно в новую строку