使用AWK编辑.csv文件

使用AWK编辑.csv文件,awk,gawk,Awk,Gawk,我有一个csv文件,我必须在其中进行一些更改,您将在我将放置的示例中看到这些更改。我想我可以用数组来做,但我不知道如何构造它。 有什么想法吗 原始文件 "1033reto";"V09B";"";"";"";"";"";"QVN";"V09B" "1033reto";"V010";"";"";"";"";"";"QVN";"V010" "1033reto";"V015";"";"";"";"";"";"QVN";"V015" "1033reto";"V08C";"";"";"";"";"";"QV

我有一个csv文件,我必须在其中进行一些更改,您将在我将放置的示例中看到这些更改。我想我可以用数组来做,但我不知道如何构造它。 有什么想法吗

原始文件

"1033reto";"V09B";"";"";"";"";"";"QVN";"V09B" "1033reto";"V010";"";"";"";"";"";"QVN";"V010" "1033reto";"V015";"";"";"";"";"";"QVN";"V015" "1033reto";"V08C";"";"";"";"";"";"QVN";"V08C" "1040reto";"V03D";"";"";"";"";"";"QVN";"V03D" "1040reto";"V01C";"";"";"";"";"";"QVN";"V01C" "1050reto";"V03D";"";"";"";"";"";"QVN";"V03D" "1050reto";"V01F";"V07L";"";"";"";"";"QVN";"V01C" “1033reto”;“V09B”;"";"";"";"";"";“QVN”;“V09B” “1033reto”;“V010”;"";"";"";"";"";“QVN”;“V010” “1033reto”;“V015”;"";"";"";"";"";“QVN”;“V015” “1033reto”;“V08C”;"";"";"";"";"";“QVN”;“V08C” “1040reto”;“V03D”;"";"";"";"";"";“QVN”;“V03D” “1040reto”;“V01C”;"";"";"";"";"";“QVN”;“V01C” “1050reto”;“V03D”;"";"";"";"";"";“QVN”;“V03D” “1050reto”;“V01F”;“V07L”;"";"";"";"";“QVN”;“V01C” 期望输出:

"1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V09B" "1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V010" "1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V015" "1033reto";"V09B";"V010";"V015";"V08C";"";"QVN";"V08C" "1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V03D" "1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V01C" "1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V03D" "1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V01C" “1033reto”;“V09B”;“V010”;“V015”;“V08C”;"";“QVN”;“V09B” “1033reto”;“V09B”;“V010”;“V015”;“V08C”;"";“QVN”;“V010” “1033reto”;“V09B”;“V010”;“V015”;“V08C”;"";“QVN”;“V015” “1033reto”;“V09B”;“V010”;“V015”;“V08C”;"";“QVN”;“V08C” “1040reto”;“V03D”;“V01C”;"";"";"";"";“QVN”;“V03D” “1040reto”;“V03D”;“V01C”;"";"";"";"";“QVN”;“V01C” “1050reto”;“V03D”;“V01F”;“V07L”;"";"";"";“QVN”;“V03D” “1050reto”;“V03D”;“V01F”;“V07L”;"";"";"";“QVN”;“V01C”
awk
救援

双通道算法。没有规定如果有足够的行,它是否将覆盖现有的最后两列

$ awk 'BEGIN{FS=OFS=";"} 
     NR==FNR{for(i=2;i<=7;i++) if($i!="\"\"") a[$1]=a[$1] FS $i;next}
            {n=split(a[$1],f,FS); for(i=2;i<=n;i++) $i=f[i]}1' csv{,}

"1033reto";"V09B";"V010";"V015";"V08C";"";"";"QVN";"V09B"
"1033reto";"V09B";"V010";"V015";"V08C";"";"";"QVN";"V010"
"1033reto";"V09B";"V010";"V015";"V08C";"";"";"QVN";"V015"
"1033reto";"V09B";"V010";"V015";"V08C";"";"";"QVN";"V08C"
"1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V03D"
"1040reto";"V03D";"V01C";"";"";"";"";"QVN";"V01C"
"1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V03D"
"1050reto";"V03D";"V01F";"V07L";"";"";"";"QVN";"V01C"
$awk'开始{FS=OFS=“;”}

NR==FNR{for(i=2;i可以指定替换规则吗?如果有。我看不到任何可以将输入转换为所需输出的规则。(例如,如果第二列等于“V09B”,则将第三列、第四列和第五列的值设置为“V010”、“V015”、“V08C”。)如您所见,原始文件是按字段1排序的。从2到7的字段包含必须添加的代码,以获得一个块,我们将使用该块替换原始行中从2到7的字段。我认为我们的想法是创建一个包含6个空字段的数组,然后读取从2到7的字段。如果字段不是空的,请将其添加到t数组中的第一个位置if为空忽略它。因此,对于组中的每一行。行组由第一个字段定义。但是,我不知道怎么做。每一行的字段1、8和9不得更改。我如何将行打印到新文件?@Criatos
awk'…'file>new_file
没有打印任何内容。karakfa代码缺少一些内容hing.代码中没有“print…;”,没有打印任何内容。karakfa代码缺少某些内容。代码中没有“like(print which…;)”打印内容。@Criatos为什么不测试代码?在awk中不需要显式的
打印