从shell脚本执行awk脚本会产生语法错误

时间:2015-10-20 13:58:14

标签: awk nawk

目前我正在使用一个脚本,我在其中调用AWK

/usr/bin/nawk -f rst.awk file1 file2

和rst.awk看起来像

cat rst.awk
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])

在这种情况下,我需要确保每次都检查rst.awk是否有以上内容来运行脚本。

我们可以在脚本中编写rst.awk内容吗? 我自己尝试但没有运气。

cat te.sh
/usr/bin/nawk -f
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])
file1 file2



./te.sh
/usr/bin/nawk: no program filename
./te.sh: line 2: syntax error near unexpected token `$2,a,/\./'
./te.sh: line 2: `{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3]}'

1 个答案:

答案 0 :(得分:4)

你需要te.sh来包含以下任何一个:

#!/usr/bin/nawk -f
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])

/usr/bin/nawk '
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])
' "$@"

我强烈推荐后者。无论哪种方式,您都可以将其作为te.sh file1 file2执行。

btw"需要帮助awk"只是你可以选择的最糟糕的主题线,并没有比#34;恐龙闻起来有趣"对于将来寻找类似问题答案的人来说,或者同样没用。选择捕获问题的主题行,例如: "从shell脚本执行awk脚本会产生语法错误"。