如何向文件中的换行符字段值添加引号

如何向文件中的换行符字段值添加引号

输入文件具有两个记录和三个字段,第二个属性包含换行符。我想用双引号将每个字段值括起来。

输入文件:

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将制表符转换回新行

相关内容