输入文件具有两个记录和三个字段,第二个属性包含换行符。我想用双引号将每个字段值括起来。
输入文件:
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
将制表符转换回新行