使用FPAT拆分CSV文件并将任何嵌入的逗号替换为空格““

omjgkv6w  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(81)

我有一个文本文件,其中包含一个示例记录,看起来像这样...
第一个月
我需要将位置3和5中嵌入的逗号替换为空格“”
下面是我在bash脚本中的awk代码...

AWK_script="BEGIN {
   OFS=\",\"
}
{
   for (i=1; i<=NF; i++)
   {
      if ( \$i==3 || \$i==5 )
      {
         gsub(\",\",\" \",\$i)
      }
   }
   print \$0
}
"

echo 'Tampa,Orlando,"Jacksonville,FL",Miami,"Tallahassee,FL"' | awk -vFPAT='([^,]*)|("[^"]+")' "${AWK_script}"

字符串
我无法让gsub将嵌入的逗号替换为空格““。任何帮助将不胜感激。

jvlzgdj9

jvlzgdj91#

在awk脚本周围使用双引号并将其存储在字符串中,这让事情变得更加困难。字符串用于存储文本,函数用于存储代码。每个字符串或脚本都应该用单引号括起来,除非你需要双引号,然后使用它们,除非你需要没有引号。在它周围使用单引号,并将其存储在函数中。除此之外,如果您这样做,您可以摆脱awk脚本中双引号和$之前的所有反斜杠。
我觉得这就是你想做的

$ cat tst.sh
#!/usr/bin/env bash

deComma() {
    awk -v FPAT='([^,]*)|("([^"]|"")*")' -v OFS=',' '
        {
           for (i=3; i<=5; i+=2) {
               gsub(/,/," ",$i)
           }
           print
        }
    ' "${@:--}"
}

echo 'Tampa,Orlando,"Jacksonville,FL",Miami,"Tallahassee,FL"' | deComma

字符串

$ ./tst.sh
Tampa,Orlando,"Jacksonville FL",Miami,"Tallahassee FL"


有关使用awk解析CSV的更多信息,请参阅What's the most robust way to efficiently parse CSV using awk?,包括我更改FPAT设置的原因。

相关问题