我有一个包含两个代码的脚本,用于提取给定文件的数据总和并打印到另一个文件,第二个代码将丢失数据点的总数提取到另一个文件。最后,两个输出文件一起放入第三个文件中。所有三个代码单独运行时都有效。由于需要完成此操作的文件数量很大,因此我尝试在单个脚本文件中实现自动化。运行 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"
如果您希望在将结果写入输出文件之前截断(清空)输出文件,请>>
在末尾更改为。>