如何修复 shell 脚本中 awk 的语法错误?

如何修复 shell 脚本中 awk 的语法错误?

我有一个包含两个代码的脚本,用于提取给定文件的数据总和并打印到另一个文件,第二个代码将丢失数据点的总数提取到另一个文件。最后,两个输出文件一起放入第三个文件中。所有三个代码单独运行时都有效。由于需要完成此操作的文件数量很大,因此我尝试在单个脚本文件中实现自动化。运行 bash shell。 Colavg.sh文件已获得执行权限。当我尝试将其作为单个脚本运行时,出现以下错误:

awk: cmd. line:1: ./Colavg.sh
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: ./Colavg.sh
awk: cmd. line:1:   ^ unterminated regexp
#!/bin/awk

awk -F ',' 'NF==4{count++} END {print "missing: "count}' County029-CO-0023-T0000JD.out > avg.out;
awk -F ',' '$4==-999{c999++}; END{print "missing: "c999}' County029-CO-0023-T0000JD.out > avg1.out;
cat avg1.out avg.out >> County029-CO-0023-T0000JD-avg.out

答案1

问题是你的脚本的#!-line 。它应该#!/bin/sh是一个 shell 脚本,而不是一个awk脚本。

这里真正发生的是,带有错误行的 shell#!将执行

/bin/awk ./Colavg.sh

这意味着使用文本字符串./Colavg.sh作为awk程序。作为一个awk程序,这是没有意义的,你的awk解释器在决定退出之前会识别出两个单独的错误。


该脚本可以简化:

#!/bin/sh

name=County029-CO-0023-T0000JD

awk -F , '
    $4 == -999 { c999++  }
    NF == 4    { count++ } 
    END { printf "missing: %d\n", c999  }
    END { printf "missing: %d\n", count }' "$name.out" >>"$name-avg.out"

如果您希望在将结果写入输出文件之前截断(清空)输出文件,请>>在末尾更改为。>

相关内容