为啥 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,它工作得很好。
【问题讨论】:
尝试将&&
分组为($14 < 0.05 && $10 < -1) && $7 > 1
cat -vet "Results-RPKMs.csv | head -10
。你在每一行的末尾看到^M$
吗?如果是这样,那么dos2unix Results-RPKMs.csv
。否则编辑您的问题以包括来自两台机器的awk --verion
的结果。祝你好运。
我刚刚在 MacOS X 上使用 BSD awk
版本 20070501 尝试了您的脚本,它和 mawk
和 gawk
一样顺利运行
仅供参考 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 sed
和BSD sed
,这也是一个陷阱。
实际上Linux一般使用gawk
或mawk
:
$ 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 脚本