为什么awk脚本在Mac OS上不起作用但在Linux上有效?

时间:2014-06-20 17:48:25

标签: macos awk filtering

我有这个用于过滤差异表达基因的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机器有1.3.3的mawk。命令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,它可以正常工作。 最好的。

2 个答案:

答案 0 :(得分:13)

相同的命令名称并不意味着它是相同的命令。大多数基本命令都有不同的实现,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

答案 1 :(得分:12)

我也有同样的问题。通过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)
~$