背景 - 我想从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)