![如何向文件中的换行符字段值添加引号](https://linux22.com/image/146837/%E5%A6%82%E4%BD%95%E5%90%91%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%AD%97%E6%AE%B5%E5%80%BC%E6%B7%BB%E5%8A%A0%E5%BC%95%E5%8F%B7.png)
输入文件具有两个记录和三个字段,第二个属性包含换行符。我想用双引号将每个字段值括起来。
输入文件:
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
将制表符转换回新行