我是生物信息学家,但我来自生物学.我还在初学阶段学习.但是现在我在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并且无法弄清楚导致此错误的原因.
你真正的问题已经在注释(已回答增加一个 -运算符++不允许空格),但我会建议把这个东西多一点高性能只运行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)