【问题标题】:Why my awk to extract a column in CSV have a trailing double quote?为什么我在 CSV 中提取列的 awk 有一个尾随双引号?
【发布时间】:2016-06-27 03:57:30
【问题描述】:

我有一个这样的 csv 文件。

"cnt","phr"
"3679650","URL1"
"844588","URL2"
"572854","URL3"
"469274","URL4"

我用谷歌搜索并找到了这个命令。

awk -F "\"*,\"*" '{print $2}' test.csv

我得到了这个结果

URL1"
URL2"
URL3"
URL4"

我是怎么得到的?

URL1
URL2
URL3
URL4

我正在使用 OSX

【问题讨论】:

    标签: macos shell csv awk


    【解决方案1】:

    您可以将此 awk 命令与字段分隔符作为逗号或双引号一起使用:

    awk -F '[",]+' 'NR>1{print $3}' file.csv
    
    URL1
    URL2
    URL3
    URL4
    

    或者使用gsub 和逗号作为字段分隔符

    awk -F, 'NR>1{gsub(/"/, ""); print $2}' file.csv
    
    URL1
    URL2
    URL3
    URL4
    

    【讨论】:

      【解决方案2】:

      您获得该报价的原因是因为它不是您的字段分隔符。您定义的 FS 包含一个逗号。

      有一些复杂的正则表达式可用于将 awk 用于 CSV 数据,但我通常建议使用适当的 CSV 解析器来解析 CSV 数据。 Ruby 有一个易于使用的:

      ruby -rcsv -e 'CSV.foreach(ARGV.shift) {|row| puts row[1]}' file
      

      哪个输出

      phr
      URL1
      URL2
      URL3
      URL4
      

      【讨论】:

        【解决方案3】:

        替代awk

        $ tr -d '"' <file | cut -d, -f2 | sed 1d
        URL1
        URL2
        URL3
        URL4
        

        说明:删除引号,使用逗号分隔选择第二个字段,删除第一行

        【讨论】:

          猜你喜欢
          • 2013-04-07
          • 1970-01-01
          • 2013-01-23
          • 1970-01-01
          • 2016-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多