awk: 0602-562 字段 $() 不正确。在 AIX 上的 ksh 脚本中

awk: 0602-562 字段 $() 不正确。在 AIX 上的 ksh 脚本中

我有一个文本文件,其中包含多个位置的信息。文件中的每个新部分都有一个标题。我试图将所有信息放在一个标题下,去掉标题,然后将其移动到一个单独的文件中。所有部分都根据标头信息移动到单独的文件中。我正在使用 aix 上运行的 ksh 在 shell 脚本中对此进行编程。

awk '/FILE-HDRPQ/{x=substr ($0,11,6)}NR>1{print $0 > $TRANSDIR"/"x"_prchgrpt.txt";}' $TRANSDIR/$prcfile

FILE-HDRPQ 是标头的第一部分。 $0 包含从该标题到下一个标题之前的行的所有列。 x=标头中的标识号,用于创建 $0(减去顶部标头行)将转储到的文件名。

变量 $TRANSDIR 和 $prcfile 帮助我们命名文件并将其放置在正确的目录中。这些变量在脚本的前面被调用。

我现在得到

awk: 0602-562 字段 $() 不正确。

当我运行脚本时。我一生都无法弄清楚出了什么问题。我尝试过使用单引号和双引号。

答案1

awk总是试图解释$<something>为字段值(例如$0- 整个记录,$3- 第三个字段,$NF- 最后一个字段值)

通过变量传递目录名称:

awk -v dir="$TRANSDIR" '/FILE-HDRPQ/{x=substr ($0,11,6)}
       NR>1{print $0 > dir"/"x"_prchgrpt.txt";}' "$TRANSDIR/$prcfile"

答案2

您应该显式地将 TRANSDIR 变量传递给 awk,如下所示:

awk -v TRANSDIR="$TRANSDIR"

然后像这样使用它:

print $0 > TRANSDIR

在 awk 脚本内。

相关内容