为啥 awk 脚本不能在 Mac OS 上运行,但在 Linux 上运行?

Posted

技术标签:

【中文标题】为啥 awk 脚本不能在 Mac OS 上运行,但在 Linux 上运行?【英文标题】:Why awk script does not work on Mac OS but works on Linux?为什么 awk 脚本不能在 Mac OS 上运行,但在 Linux 上运行? 【发布时间】:2014-08-11 13:06:52 【问题描述】:

我有这个 awk 脚本,用于过滤差异表达的基因。我有一个在 R 中创建的 csv 文件。

 #Command to get DE genes
awk -F '\t' '$14 < 0.05 && $10 < -1 && $7 > 1  print > "Genes-Down.csv" 
             $14 < 0.05 && $10 > +1 && $8 > 1  print > "Genes-Up.csv" ' Results-RPKMs.csv

我现在开始在 Mac OS 上进行所有分析,但相同的命令不起作用。它也没有给出任何错误信息。它运行并且没有任何反应。我在使用其他 sed 命令时也遇到了同样的问题,但是使用 awk 很容易创建新命令。


更新: MacOS X awk 的版本是 20070501。但是,Ubuntu 机器具有 mawk 1.3.3。命令 awk --version 不起作用。必须使用 awk -W --version。所以我认为这就是它在 Ubuntu 上工作但在 MacOSX 上不工作的原因。所以我下载了 mawk 并使用 fink 安装它,现在该命令在 MacOSX 中工作。感谢您的帮助。

Update2:实际上问题不是 awk。通常我在 R 中创建 csv 文件。然后我只运行脚本来进行过滤。事实证明,如果我在 Excel 中打开 csv 文件或以 csv 格式保存 Excel 文件,则该脚本不起作用(尝试使用不同的分隔符多次)。显然,如果您在 MacOX(Excel 2011)中将电子表格另存为 .csv 并尝试在 Excel 中打开它,它会说它是一个 SYLK 文件。 Microsoft 网站上有关于此的说明。如果我使用 OpenOffice,它工作得很好。

【问题讨论】:

尝试将&amp;&amp; 分组为($14 &lt; 0.05 &amp;&amp; $10 &lt; -1) &amp;&amp; $7 &gt; 1 cat -vet "Results-RPKMs.csv | head -10 。你在每一行的末尾看到^M$ 吗?如果是这样,那么dos2unix Results-RPKMs.csv。否则编辑您的问题以包括来自两台机器的awk --verion 的结果。祝你好运。 我刚刚在 MacOS X 上使用 BSD awk 版本 20070501 尝试了您的脚本,它和 mawkgawk 一样顺利运行 仅供参考 mawk 是一个功能最少的 awk,经过精简以帮助它比其他一些 awk 运行得更快一些。最好安装功能丰富的 POSIX 超集 gawk。 【参考方案1】:

我也遇到了同样的问题。通过brew 在OSX 10.11.2 上安装gawk 解决了我的问题。

~$ brew install gawk
~$ gawk --version | head -n 1
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.4-p1, GNU MP 6.1.1)
~$

【讨论】:

也为我工作。【参考方案2】:

相同的命令名称并不意味着它是相同的命令。大多数基本命令都有不同的实现,AWK 就是一个例子,但几乎所有的GNU core utils 在 BSD 许可证中都有其等效项。你应该小心GNU sedBSD sed,这也是一个陷阱。

实际上Linux一般使用gawkmawk

$ man awk
mawk - pattern scanning and text processing language

Mac OS 一般使用nawk:

$ man awk
awk - pattern-directed scanning and processing language

有关 AWK 实现的更多信息,请参阅 this page。

【讨论】:

以上是关于为啥 awk 脚本不能在 Mac OS 上运行,但在 Linux 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥OSX 不能在“Macintosh HD”上安装,Mac OS X 讨论区

为啥mac升级之后,升级成mac OS Sierra 10.12.1,我的parallels Desktop就启动不了,需要重新安装吗?

无法在 Mac OS Lion 上运行配置良好的 php 脚本

AWK Mac OSX如何在同一行打印数组键和数组值

为啥 jQuery 不能在我的 Mac 上的 xampp 上运行?

为啥 Python easy_install 不能在我的 Mac 上运行?