AWK:了解是否在windows上运行

AWK:了解是否在windows上运行,windows,awk,Windows,Awk,如何确定我是否在Windows上 我需要在AWK中执行特定于操作系统的命令 具体来说,我想 系统(“mkdir”)在windows和 system(“mkdir-p DIR”)其他任何地方(Unix/Linux/OS X/BSD), 以递归方式创建目录。我无法测试此答案,因为我没有访问Windows系统的权限,但请尝试使用ENVIRON变量。Linux和Unix路径用分隔:,而Windows路径用分隔。你可以检查一下,比如: awk ' BEGIN { is_window

如何确定我是否在Windows上

我需要在AWK中执行特定于操作系统的命令

具体来说,我想
系统(“mkdir”)
在windows和
system(“mkdir-p DIR”)
其他任何地方(Unix/Linux/OS X/BSD),
以递归方式创建目录。

我无法测试此答案,因为我没有访问
Windows
系统的权限,但请尝试使用
ENVIRON
变量。Linux和Unix路径用
分隔:
,而
Windows
路径用
分隔。你可以检查一下,比如:

awk '
    BEGIN {
        is_windows = 0;
        if ( index( ENVIRON["PATH"], ";" ) > 0 ) {
            is_windows = 1;
        }
    }
    ...
' input-file

如果
Windows
路径中只有一个目录,这可能会失败,但我希望您能理解。也许几个环境变量或类似的组合会更有帮助。

这是一个稍微优化的版本

OS
environment变量仅在windows上指定,并且(假定)总是在windows上指定,并且它应该始终包含字符串“windows”的某种形式,例如“windows\n”


感谢来自#awk和#awk的家伙们

我想你可以做
{if(!system(“uname>/dev/null”))打印“*nix”}
。(我想Windows上没有
uname
)。是的,Windows上没有uname,也没有/dev/null,因此这很可能会在Windows上创建一条错误消息,这是不可取的。如果Birei的答案导致了您的解决方案,不要忘了通过单击他答案旁边的复选标记来给他评分。复选标记。。。但我认为这是为了标记正确/最好的答案,而我的答案更好,尽管大部分答案都是从他那里抄来的。所以我希望其他人看到我的答案,当他们有同样的问题,而不是他的。难道我不应该在我的答案上打勾吗?如果大部分答案都是从他的答案上抄来的,那么他应该得到表扬。你能使用它真是太好了。如果你不给予表扬,他就得不到分数,也没有动力回答你未来的问题。注意,如果你给自己的答案打勾,你就得不到分数。我不在乎分数,我想让他得到分数,但对我来说更重要的是,有同样问题的人会用最好的回答作为参考。我能不能把学分和正确答案分成两个不同的答案?你可能不在乎,但其他人在乎。你不能“分割积分”,但你可以在你的问题中添加一个更新,显示你是如何使用Birei的答案的,或者你可以在他的答案中添加评论。请参阅下面我自己的答案,以获得此答案的稍微改进版本
awk '
    BEGIN {
        is_windows = 0;
        if (index(tolower(ENVIRON["OS"]), "windows") > 0) {
            is_windows = 1;
        }
    }
    ...
' input-file