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

Executing an awk script from a shell script produces syntax errors

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

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

和rst.awk看起来像

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

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

我们可以在脚本本身中编写 rst.awk 内容吗? 自己尝试过,但没有成功。

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



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

您需要 te.sh 才能包含以下任一内容:

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

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

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

btw "Need help on Awk" 几乎是您可以选择的最糟糕的主题行,并不比 "dinosaurs smell funny" 好多少,或者对于将来寻找类似问题的答案的人来说同样没有用。选择能反映您的问题的主题行,例如"Executing an awk script from a shell script produces syntax errors".