有人可以帮助我解决这个awk语法错误

Tia*_*uno 0 awk

我是生物信息学家,但我来自生物学.我还在初学阶段学习.但是现在我在awk中遇到了一个错误.该文件显示了这个命令,我完全按照它的方式执行但仍然如此.

自然协议的这篇论文中,这样的 awk中有一个命令,用于"为每个程序集打印一个简单的表,列出每个程序集中有多少个转录本与已知的成绩单完全匹配".

$ for i in 'find . -name *.tmap'; do echo $i; awk 'NR  >  1 { s[$3] +  +  } END { \

for (j in s) { print j, s[j] }} ' $i; done;
Run Code Online (Sandbox Code Playgroud)

然后,我收到一个错误:

find . -name *.tmap
awk: NR  >  1 { s[$3] +  +  } END {
awk:                        ^ syntax error
Run Code Online (Sandbox Code Playgroud)

不幸的是我不知道如何使用awk并且无法弄清楚导致此错误的原因.

joe*_*epd 6

你真正的问题已经在注释(已回答增加一个 -运算符++不允许空格),但我会建议把这个东西多一点高性能只运行gawk一次(BEGINFILE需要gawk):

gawk '
    FNR>1 { s[$3]++ }
    ENDFILE {
        print FILENAME
        for (j in s) print j, s[j]
        delete s
    }
' $(find . -name '*.tmap')
Run Code Online (Sandbox Code Playgroud)

产生新的PID相对昂贵.如果你有很多文件,你可以使用xargs(假设你存储prog.awk了当前目录中的awk编程):

find . -name '*.tmap' -type f -print0 | \
    xargs -0 --max-args=1000 gawk -f prog.awk
Run Code Online (Sandbox Code Playgroud)