为什么我的脚本中出现此错误?awk: script.awk:19: “ 语法错误

杰克·洛克

我有 2 个文本文件

1.txt

AA;00000;
BB;11111;
GG;22222;

2.txt

KK;WW;55555;11111;
KK;FF;ZZ;11111;
KK;RR;YY;11111;

我尝试生成此3.txt输出:

AA;00000;
BB;11111;KK;WW;55555;KK;FF;ZZ;KK;RR;YY;
GG;22222;

在删除重复字段后,我应该有这个

AA;00000;
BB;11111;KK;WW;55555;FF;ZZ;RR;YY;
GG;22222;

简而言之:在由;(FS=";")分隔的两个文件中,如果$n文件 1 中的字段存在$m于文件 2中的任何位置,其中 m,n 不为 1,则附加$0(file2,m)$0(file1,n). 必须避免重复字段。

我会尝试草拟一个解决方案

awk -f script.awk 2.txt 1.txt

其中脚本如下:

BEGIN {
    FS=";"
    OFS=";"
}

NR==FNR {
    allRecordsFile2[i++] = $0;
    next;
}

{
    for(r in allRecordsFile2)
    {
         split(allRecordsFile2[r],";",array)
         for(f in array)
         {
             for($2 through $n of file1 currently processed)
             {
                 if $n == f --> $0 = $0";"allRecordsFile2[r]
             }
         }
    }

    ## cleanup duplicates

    print $0
}

我还需要敲定清理重复,但也许这可以通过拆分进行$0通过";"使用计数阵列跟踪重复的和。

但运行此脚本后,我返回语法错误

C:\Program Files (x86)\GnuWin32\bin>awk -f script.awk file2.txt file1.txt

awk: script.awk:17: for($2 through $n of filei currently processed)
awk: script.awk:17: “ syntax error
awk: script.awk:19: if $n == f --> $0 = $0";"allRecordsFile2[r]
awk: script.awk:19: “ syntax error
awk: script.awk:19: if $n == f --> $0 = $0";"allRecordsFile2[r]
awk: script.awk:19: “ syntax error
errcount:3

语法错误

大卫·C·兰金

与其尝试基于FNR/ 的顺序读取和控制NR,为什么不使用getline读取2.txt和拆分';'然后构建输出字符串(o如下),将每一行的唯一组件连接起来?你可以做类似的事情:

awk '{
        printf "%s", $0
    }
    /^BB/ {
        o = ""
        while (getline tmp < "2.txt") {
            n = split (tmp,arr,";")
            for (i=1; i<=n; i++)
                if(!match($0,arr[i]) && !match(o,arr[i]))
                    o=o arr[i]";"
        }
        printf "%s", o
    }
    {
        print ""
    }
' 1.txt

示例使用/输出

使用1.txtand 中的示例数据2.txt(您1.txt再次命名错误),您将收到:

$ awk '{
>         printf "%s", $0
>     }
>     /^BB/ {
>         o = ""
>         while (getline tmp < "2.txt") {
>             n = split (tmp,arr,";")
>             for (i=1; i<=n; i++)
>                 if(!match($0,arr[i]) && !match(o,arr[i]))
>                     o=o arr[i]";"
>         }
>         printf "%s", o
>     }
>     {
>         print ""
>     }
> ' 1.txt
AA;00000;
BB;11111;KK;WW;55555;FF;ZZ;RR;YY;
GG;22222;

这看起来像你想要的。


作为以两个文件名作为参数的脚本

Windows 应遵循相同的约定,使用ARGV. 请注意,在awk脚本中运行时,不要在规则周围包含单引号,例如

#!/usr/bin/awk -f 

NR != FNR {
    exit
}
{
    printf "%s", $0
}
/^BB/ {
    o = ""
    while (getline tmp < ARGV[2]) {
        n = split (tmp,arr,";")
        for (i=1; i<=n; i++)
            if(!match($0,arr[i]) && !match(o,arr[i]))
                o=o arr[i]";"
    }
    printf "%s", o
}
{
    print ""
}

注意:您需要将/usr/bin/awk口译员更改为您拥有的任何内容)

用法是,例如 ./test.awk 1.txt 2.txt

如果这有帮助,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AWK语法错误

来自分类Dev

AWK-语法错误

来自分类Dev

awk命令语法错误

来自分类Dev

awk 中的语法错误

来自分类Dev

AWK错误-grep或附近的语法错误

来自分类Dev

如果我不在AWK的END块中写'if',为什么会出现语法错误?

来自分类Dev

如果我不在AWK的END块中写'if',为什么会出现语法错误?

来自分类Dev

awk:意外令牌'('附近的语法错误

来自分类Dev

awk程序中的语法错误

来自分类Dev

awk程序中的语法错误

来自分类Dev

awk:意外令牌'('附近的语法错误

来自分类Dev

语法错误与awk中的if else

来自分类Dev

awk 函数语法错误?

来自分类Dev

Perl脚本引发awk命令的语法错误

来自分类Dev

创建数组时出现awk语法错误

来自分类Dev

使用awk打印时出现语法错误

来自分类Dev

awk语法错误:源代码行1上的语法错误

来自分类Dev

Awk语法错误以及日志中的时间布局

来自分类Dev

awk:第1行:>或附近的语法错误>

来自分类Dev

使用if语句的awk调用语法错误,无需

来自分类Dev

使用 awk 循环变量时的语法错误

来自分类Dev

在shell脚本中尝试在循环中运行awk时出现“语法错误:循环变量无效”

来自分类Dev

为什么awk'NR%2 == 1?ORS =“;” :: ORS =“ \ n”'给出语法错误?

来自分类Dev

为什么我在 LAG() 函数中出现语法错误?

来自分类Dev

为什么此CMD脚本出现语法错误?

来自分类Dev

为什么我的 bash 脚本在终端中运行时将此 awk 子字符串命令标记为语法错误?

来自分类Dev

解析错误:语法错误,第19行出现意外的'$ Email'(T_VARIABLE)

来自分类Dev

为什么我总是在bash脚本中出现语法错误

来自分类Dev

谁能找到解决此MongoDB语法错误的方法:非法字符@(shell):1:19?

Related 相关文章

热门标签

归档