我有一个文本文件,其中包含多个位置的信息。文件中的每个新部分都有一个标题。我试图将所有信息放在一个标题下,去掉标题,然后将其移动到一个单独的文件中。所有部分都根据标头信息移动到单独的文件中。我正在使用 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 脚本内。