Почему awk-скрипт не работает на Mac OS, но работает на Linux?

#macos #awk #filtering

#macos #awk #фильтрация

Вопрос:

У меня есть этот awk-скрипт, который я использую для фильтрации генов, которые экспрессируются по-разному. У меня есть csv-файл, который был создан в R.

  #Command to get DE genes
awk -F 't' '$14 < 0.05 amp;amp; $10 < -1 amp;amp; $7 > 1 { print > "Genes-Down.csv" }
             $14 < 0.05 amp;amp; $10 >  1 amp;amp; $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. Обычно я создаю csv-файлы в R. Затем я просто запускаю скрипт для выполнения фильтрации. Оказывается, что если я открываю csv-файлы в Excel или сохраняю файл Excel в формате csv, то скрипт не работает (пробовал несколько раз с разными разделителями). Очевидно, что если вы сохраните электронную таблицу в формате .csv в MacOX (Excel 2011) и попытаетесь открыть ее обратно в Excel, он скажет, что это файл SYLK. На веб-сайте Microsoft есть описание этого. Если я использую OpenOffice, он работает просто отлично.

Комментарии:

1. попробуйте сгруппировать amp;amp; как ($14 < 0.05 amp;amp; $10 < -1) amp;amp; $7 > 1

2. cat -vet "Results-RPKMs.csv | head -10 . Вы видите ^M$ в конце каждой строки? Если да, то dos2unix Results-RPKMs.csv . Еще отредактируйте свой вопрос, чтобы включить результаты awk --verion с обеих машин. Удачи.

3. Я только что попробовал ваш скрипт с BSD awk версией 20070501 на macOS X, и он работал без сбоев, как mawk и gawk

4. К вашему сведению, mawk — это awk с минимальными функциями, урезанный, чтобы помочь ему работать немного быстрее, чем некоторые другие awk. Вам было бы намного лучше установить многофункциональный POSIX-superset gawk.

Ответ №1:

У меня тоже была такая же проблема. Установка gawk на OSX 10.11.2 через brew решила мою проблему.

 ~$ 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. У меня тоже сработало.

Ответ №2:

Одинаковое имя команды не означает, что это одна и та же команда. Большинство базовых команд имеют другую реализацию, AWK является примером, но почти все утилиты ядра GNU имеют эквивалент в лицензии BSD. Вы должны быть осторожны с GNU sed and 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.