【问题标题】:Unit script AWS/ SED help to add double quotes / how to match double quotes?单元脚本 AWS/SED 帮助添加双引号/如何匹配双引号?
【发布时间】:2021-09-24 09:31:03
【问题描述】:

我有以下记录到 txt 文件中。

000D3A|"RiFR Botnets" AD||83634C|dk
000D3|Ries Bidvest" AD||8364A3C|dhh
000D3A|"Ra Boots D"||83634C|gft

在这里,我想使用 AWK Unix 命令为那些在行中包含 " 的记录添加双引号。

我想写入文件的预期输出:

000D3A|""RiFR Botnets" AD"||83634C|dk
000D3|"Ries Bidvest" AD"||8364A3C|dhh
000D3A|""Ra Boots""||83634C|gft

我尝试过使用 AWS 命令​​和 AWK -F "|"但是我如何在文件的每一行中搜索双引号“”。

【问题讨论】:

  • 您可能还需要将这些字段中现有的"s 加倍。否则,由于只影响第二个字段,请尝试sed -E 's/(^|\|)([^|]*"[^|]*)($|\|)/\1"\2"\3/' file
  • 请在您的问题中添加您尝试过的代码,谢谢。
  • ""Ries Bidvest" AD" 和 "Ries Bidvest" AD" 和 ""Ra Boots"" 会将您的文件变成不再有效的 CSV 文件,从而破坏您的文件。您可能需要"Ries Bidvest"" AD" 或 ``"""Ries Bidvest"" AD"""` ` 和 "Ries Bidvest"" AD" 的组合,然后是 "Ra Boots" 或 """Ra Boots"""。
  • 这似乎与您几个小时前在stackoverflow.com/q/68383086/1745001 提出的问题相同,该问题因未尝试自己先解决而被关闭。

标签: unix awk sed


【解决方案1】:

你可以试试:

awk -F"|" -v OFS="|" '{
    for (i=1;i<=NF;i++)       # for every field...
        if (match($i,"\""))   # check for "
            $i="\"" $i "\""   # add quotes to that field
    }

    1 # print' file 
000D3A|""RiFR Botnets" AD"||83634C|dk
000D3|"Ries Bidvest" AD"||8364A3C|dhh
000D3A|""Ra Boots D""||83634C|gft

或者,你可以使用这个sed:

sed -E 's/\|([^|]*"[^|]*)\|/|"\1"|/g' file 
# same output 

(如 cmets 中所述,结果不是有效的 csv。您要求这样做,但 "Ries Bidvest" AD" 引用无效,会破坏 csv 解析...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多