【问题标题】:Remove extra comma and double-quotes in CSV file and extract specific columns删除 CSV 文件中多余的逗号和双引号并提取特定列
【发布时间】:2014-06-09 19:22:04
【问题描述】:

我有一个 .csv 文件,如下所示,我需要删除双引号之间的多余逗号并提取第二、第三和第七个字段。

示例输入:

John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com

输出应如下所示:

qa,mv,john@gmail.com

【问题讨论】:

    标签: linux ubuntu csv awk


    【解决方案1】:

    您需要使用适当的 CSV 解析器。例如,使用 ruby​​:

    echo 'John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com' | 
    ruby -rcsv -ne '
      row = CSV.parse_line($_)
      puts CSV.generate_line([row[1],row[2],row[6]])
    '
    
    qa,mv,john@gmail.com
    

    【讨论】:

      【解决方案2】:

      awk/sed 解决方案

      awk '{print  $2, $3, $7}' file |sed 's/"//g'
      

      【讨论】:

        【解决方案3】:

        或者使用perl's内置模块Test::Parsewords

        $ cat file
        John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com
        

        $ perl -MText::ParseWords -lne '
           @line = parse_line(",", 1, $_); 
           print join "," , @line[1,2,6]
        ' file
        qa,mv,john@gmail.com
        

        请注意,数组的索引为 0,因此适当地使用索引来打印所需的值。

        【讨论】:

          【解决方案4】:

          假设" 恰好出现两次

          awk -F',' -v OFS=',' '{sub(/".*"/,""); print $2,$3,$7;}' input.txt
          

          输出:

          qa,mv,john@gmail.com
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-07-27
            • 2016-03-18
            • 2017-09-28
            • 2018-05-12
            • 1970-01-01
            • 2013-12-10
            • 1970-01-01
            相关资源
            最近更新 更多