2014-06-20 12 views
7

Ich habe dieses awk-Skript, das ich verwende, um Gene zu filtern, die differentiell exprimiert werden. Ich habe eine CSV-Datei, dieWarum funktioniert das awk-Skript unter Mac OS nicht, funktioniert aber unter Linux?

#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 

in R. erstellt wurde begann ich jetzt alle meine Analysen auf Mac OS zu tun und demselben Befehl funktioniert nicht. Es gibt auch keine Fehlermeldung. Es läuft und nichts passiert. Ich hatte auch dieselben Probleme mit anderen sed-Befehlen, aber es war einfach, neue mit awk zu erstellen. Danke.

Update: Die MacOS X awk ist Version 20070501. Allerdings hat die Ubuntu-Maschine mawk 1.3.3. Der Befehl awk --version würde nicht funktionieren. Musste awk -W Version verwenden. Ich denke, das ist der Grund, warum es unter Ubuntu funktioniert, aber nicht in MacOSX funktioniert. Also habe ich mawk heruntergeladen und mit fink installiert und nun funktioniert der Befehl in MacOSX. Danke für Ihre Hilfe.

Update2: Eigentlich war das Problem nicht awk. Normalerweise erstelle ich die csv-Dateien in R. Dann führe ich einfach das Skript aus, um die Filterung durchzuführen. Stellt sich heraus, dass, wenn ich die csv-Dateien in Excel öffne oder eine Excel-Datei im CSV-Format speichern, dann das Skript nicht funktioniert (mehrmals mit verschiedenen Trennzeichen versucht). Anscheinend, wenn Sie eine Tabelle als .csv in MacOX (Excel 2011) speichern und versuchen, es wieder in Excel zu öffnen, sagt es, dass es eine SYLK-Datei ist. Es gibt eine Beschreibung davon auf der Microsoft-Website. Wenn ich OpenOffice verwende, funktioniert es gut. Beste.

+0

versuchen die Gruppierung '&&' als '(14 $ <0,05 && $ 10 < -1) && $7 > 1 ' –

+3

' cat -vet „Ergebnis-RPKMs.csv |. Kopf -10' sehen Sie'^M '$ an die Ende jeder Zeile? Wenn ja, dann 'dos2unix Results-RPKMs.csv'. Anderenfalls editiere deine Frage, um die Ergebnisse von' awk --verion' von beiden Rechnern einzubinden. Viel Glück. – shellter

+1

Ich habe gerade dein Skript mit 'BSD awk' ausprobiert Version 20070501 auf MacOS X und es funktionierte ohne Probleme wie 'mawk' und' gawk' – Scrutinizer

Antwort

8

Ein gleicher Befehlsname bedeutet nicht, dass es sich um denselben Befehl handelt. Die meisten grundlegenden Befehle haben eine andere Implementierung, AWK ist ein Beispiel, aber fast alle GNU core utils haben ihre Entsprechung in BSD-Lizenz. Sie sollten vorsichtig sein mit GNU sed und BSD sed, es ist auch eine Falle.

In Wirklichkeit Linux verwendet im Allgemeinen gawk oder mawk:

$ man awk 
mawk - pattern scanning and text processing language 

Mac OS verwendet im Allgemeinen nawk:

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

this page über AWK-Implementierungen für weitere Informationen sehen.

3

Ich hatte auch das gleiche Problem. Installation gawk auf OSX 10.11.2 bis brew löste mein Problem.

~$ 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) 
~$ 
+1

Arbeitete auch für mich. –

Verwandte Themen