mun*_*ish 2 solaris awk shell-script
bash-3.00# awk '{print NR}' f1.txt
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但 FNR 不打印任何内容。
awk '{print FNR}' f1.txt
Run Code Online (Sandbox Code Playgroud)
上面的行没有给我任何输出,似乎我在 sun os 中使用的 awk 没有 FNR 变量。所以我可以做些什么来标准化它。另外,我可以获取所有最新命令的库并安装/更新我当前的命令,如 sed、sort 等。
SunOS 未知 5.10 Generic_142910-17 i86pc i386 i86pc
它不仅有一个awk
和多个版本。有许多 awk 实现,每个实现都有多个版本。所有的 Unices 都有自己的工具集,它们在内部维护,以及一个 Unix 附带的软件,并且使用这些工具通常依赖于那些是该实现的确切版本。
如果您开始替换/usr/bin/awk
为可从http://gnu.org下载的 GNU awk ,那么您将遇到问题。
一些 Unices 会打包一些标准实用程序的替代或免费软件版本。通常,他们通过将它们安装在不同的位置(/opt/gnu
例如对于 GNU 工具)或以不同的名称(gawk
对于 GNU awk)来实现。如果没有,您可以将它们下载为源代码并自行构建它们并将它们安装在不同的位置或以不同的名称手动安装。
话虽如此,众所周知,Solaris 中有一些实用程序的非常旧和非标准版本,/usr/bin
并将现代/标准版本保存在另一个地方。
awk 就是这种情况。/usr/bin/awk
在 Solaris 上基于 1979 年的原始 awk。 awk 大约在 1988 年被重写并称为nawk
. 所有现代awk
实现都基于此nawk
(因为这是 POSIXawk
规范所基于的)。
在 Solaris 上,如果您更新您$PATH
以将自己置于标准/POSIX 环境中(通常涉及放置/usr/xpg4/bin
和/或 /usr/xpg6/bin
在 的开头$PATH
),那么awk
将是标准环境。或者,您可以调用nawk
代替awk
。
对于sh
,您可以使用/usr/xpg4/bin/sh
或ksh
。
在标准 sh(即不在 /bin/sh
Solaris 上)中,您还可以使用
command -p awk
Run Code Online (Sandbox Code Playgroud)
一定要调用便携式awk 而不是旧的。