小编you*_*sir的帖子

使用awk或perl从CSV中提取特定列(解析)

背景 - 我想从csv文件中提取特定列.csv文件以逗号分隔,使用双引号作为text-qualifier(可选,但是当字段包含特殊字符时,限定符将在那里 - 参见示例),并使用反斜杠作为转义字符.某些字段也可能为空白.


示例输入和所需输出 - 例如,我只希望列1,3和4位于输出文件中.csv文件中列的最终提取应与原始文件的格式匹配.不应删除任何转义字符或添加额外的引号等.

输入

"John \"Super\" Doe",25,"123 ABC Street",123-456-7890,"M",A
"Jane, Mary","",132 CBS Street,333-111-5332,"F",B
"Smith \"Jr.\", Jane",35,,555-876-1233,"F",
"Lee, Jack",22,123 Sesame St,"","M",D
Run Code Online (Sandbox Code Playgroud)

期望的输出

"John \"Super\" Doe","123 ABC Street",123-456-7890
"Jane, Mary",132 CBS Street,333-111-5332
"Smith \"Jr.\", Jane",,555-876-1233
"Lee, Jack",123 Sesame St,""
Run Code Online (Sandbox Code Playgroud)

初步脚本(awk) - 以下是我发现的初步脚本大部分都有效,但在我注意到的一个特定实例中不起作用,可能还有更多我尚未看到或想到的

#!/usr/xpg4/bin/awk -f

BEGIN{  OFS = FS = ","  }

/"/{
    for(i=1;i<=NF;i++){
        if($i ~ /^"[^"]+$/){
            for(x=i+1;x<=NF;x++){
                $i=$i","$x
                if($i ~ /"+$/){
                    z = x - (i + 1) + 1
                    for(y=i+1;y<=NF;y++)
                        $y = $(y + z)
                    break …
Run Code Online (Sandbox Code Playgroud)

csv perl awk parsing

7
推荐指数
1
解决办法
2651
查看次数

标签 统计

awk ×1

csv ×1

parsing ×1

perl ×1