AWK。交换csv文件中的字段

时间:2015-10-29 22:22:29

标签: csv awk

csv文件包含九个字段。字段$ 1,$ 8和$ 9必须得到尊重。添加字段$ 2,$ 3,$ 4,$ 5,$ 6和$ 7并将其替换为重复字段$ 1的行。很难描述规则。

我必须完成这个或做这样的事情。我需要独立脚本。

BEGIN{
FS=";"
OFS="";
x="\"\"";
}
{
for(i=2;i<=7;i++) 
if($i!= x)
{
k=match(a[$1], $i);
if (k == 0)
{
a[$1]=a[$1]";"$i;
}
b[$1]=b[$1]"-"$8""FS""$9;
}
END {
for (g in a)
    t=split(a[g], A, ";");
    if (t == 2)
    {
    a[g]=a[g]";"x";"x";"x";"x";"x";";
    }
    if (t == 3)
    {
    a[g]=a[g]";"x";"x";"x";"x";";
    }
    if (t == 4)
    {
    a[g]=a[g]";"x";"x";"x";";
    }
    if (t == 5)
    {
    a[g]=a[g]";"x";"x";";
    }
for (h in b)
    q=split(b[h], B, "-");
for (z=1; z <= q; z++)
    b[h]=B[z];                               
}
}

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";"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"

1 个答案:

答案 0 :(得分:0)

通过研究Karakfa代码,我设法找到了一种没有双旁路的替代方案。

int MAX = 1000000;

for (int i = 1, increment = 1, counter = 1; i <= MAX; i += increment) {
    cout << i << endl;

    if (counter == 10) {
        increment *= 10;
        counter = 1;
    }
    ++counter;
}

}