"awk" 命令在 SuSE 11 和 Solaris 10 上的行为不同

"awk" Command Behaves Differently On SuSE 11 vs. Solaris 10

朋友,

我正在尝试提取 ksh 脚本中以下路径的最后一部分:

TOOL_HOME=/export/fapps/mytool/mytool-V2-3-4

我想从上面提取版本 #(即 2-3-4)。

awk 在 SuSE 上运行良好:

echo $TOOL_HOME | awk -F'mytool-V' '{print }'
#2-3-4

但是,在 Solaris 10 上,它会产生以下内容:

#ytool

所以在 Solaris 上,awk 会忽略 -F'mytool-V' 中第一个字符之后的所有内容

我应该怎么做才能在两个 OS 上获得相同的输出?

无需使用 awk 或任何其他外部程序。 ksh 可以做到:

echo ${TOOL_HOME##*mytool-V}

Solaris awk 坏了...

$ echo "$TOOL_HOME" | awk '{sub(/.*mytool-V/,"")}1'
2-3-4

或简单地使用 sed

$ echo "$TOOL_HOME" | sed 's/.*mytool-V//'
2-3-4

在 Solaris 上使用 /usr/xpg4/bin/awk,而不是 /bin/awk(又名 "old, broken awk")。