2014-06-20 14 views
7

Ho questo script awk che uso per filtrare i geni che sono espressi in modo differenziale. Ho un file CSV che è stato creato in R.Perché lo script awk non funziona su Mac OS ma funziona su 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 

ho iniziato a fare tutte le mie analisi su Mac OS ora e lo stesso comando non funziona. Inoltre non fornisce alcun messaggio di errore. Corre e non succede nulla. Ho avuto anche gli stessi problemi con altri comandi di sed, ma è stato facile crearne di nuovi usando awk. Grazie.

Aggiornamento: Il MacOS X awk è la versione 20070501. Tuttavia, la macchina Ubuntu ha mawk 1.3.3. Il comando awk --version non funzionerebbe. Ho dovuto usare awk -W --version. Quindi penso che sia per questo che funziona su Ubuntu ma non funzionava in MacOSX. Così ho scaricato mawk e l'ho installato usando fink e ora il comando funziona in MacOSX. Grazie per l'aiuto.

Update2: In realtà il problema non era awk. Di solito creo i file CSV in R. Quindi eseguo semplicemente lo script per fare il filtraggio. Risulta che se apro i file CSV in Excel o salvo un file Excel in formato CSV, lo script non funziona (provato diverse volte con delimitatori diversi). Apparentemente se si salva un foglio di calcolo come .csv in MacOX (Excel 2011) e si tenta di riaprirlo in Excel, si dice che si tratta di un file SYLK. C'è una descrizione di questo sul sito Web di Microsoft. Se uso OpenOffice, funziona perfettamente. Il migliore.

+0

prova a raggruppare il '' && come '($ 14 <0.05 && $ 10 < -1) && $7 > 1' –

+3

' cat -vet "per i risultati RPKMs.csv |. -10' testa Vedete'^M $ 'al fine di ogni riga? Se è così, allora 'dos2unix Results-RPKMs.csv'. Else modifica la tua domanda per includere i risultati di' awk --verion' da entrambe le macchine. Buona fortuna. – shellter

+1

Ho appena provato il tuo script con 'BSD awk' versione 20070501 su MacOS X e ha funzionato senza intoppi come ha fatto 'mawk' e' gawk' – Scrutinizer

risposta

8

Uno stesso nome di comando non significa che sia lo stesso comando. La maggior parte dei comandi di base ha un'implementazione diversa, AWK è un esempio, ma quasi tutti gli GNU core utils hanno il loro equivalente nella licenza BSD. Dovresti stare attento con GNU sed e BSD sed, anche questo è un trabocchetto.

In realtà Linux utilizza generalmente gawk o mawk:

$ man awk 
mawk - pattern scanning and text processing language 

Mac OS utilizza generalmente nawk:

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

Vedere this page per maggiori informazioni su implementazioni awk.

3

Ho anche avuto lo stesso problema. L'installazione di gawk su OSX da 10.11.2 a brew ha risolto il problema.

~$ 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

Ha funzionato anche per me. –

Problemi correlati