Bash-скрипт перестает использовать переменную без причины

Вы пытались установить Windows программное обеспечение с вином или пытался найти альтернативу Linux для программного обеспечения, например http://mitk.org/wiki/MITK ?

Взгляните на эту статью для получения списка программного обеспечения с открытым исходным кодом для медицинской визуализации. Вот еще один такой список в Европейском институте биомедицинских исследований изображений.

0
12.06.2018, 12:55
3 ответа

Я решил. Проблема здесь в том, что grep без других инструкций не может обрабатывать строки без их сортировки. Таким образом, выходной файл будет пустым, и, не знаю почему, grep создаст этот пустой файл, но с неправильным именем файла. (Кто-нибудь знает почему?)

Итак, вместо

$ grep -v -f 

Я использовал

$ grep -F -x -v -f 
0
28.01.2020, 02:31

Я действительно не понимаю, почему переменная PROJECTне раскрывается должным образом в последней строке кода (, если только вы не ищете сгенерированный файл не в том месте ), но я вижу что вы неправильно двойные кавычки расширяете свои переменные. Отсутствие двойных кавычек может вызвать проблемы, если $PROJECTсодержит пробелы, символы новой строки или любой другой символ, характерный для оболочки.

Вы также прыгаете через множество обручей для чего-то, что можно было бы сделать с помощью одной awkпрограммы:

proj=$(<temp/project_name_final)

awk 'NR==FNR { species[$3]; next } /Bifidobacterium/ && !($2 in species) { print $2 }' \
    "${proj}_species.txt" "${proj}_genera.txt" >"temp/${proj}_selected_Bif"

Эта awkпрограмма читает два файла ${proj}_species.txtи ${proj}_genera.txt. При чтении первого файла его третий столбец используется для создания ключа в ассоциативном массиве или хеше species. Когда мы начинаем читать второй файл, нас интересуют только те строки, которые содержат строку Bifidobacteriumи второй столбец которых не является ключом в хеше species. Для этих строк мы выводим второй столбец.

Весь вывод идет на temp/${proj}_selected_Bif.

Обратите внимание на двойные кавычки всех раскрытий переменной proj. Я использовал имя переменной в нижнем регистре -, поскольку переменные в верхнем регистре -зарезервированы для системных переменных и переменных среды оболочки.

См. также

1
28.01.2020, 02:31

Исходный файл содержит строку, оканчивающуюся на CR/LF. CR передается как часть переменной $PROJECT, а поскольку CR является допустимым символом в имени файла, все промежуточные шаги работают правильно. (Но имена файлов "неправильные".)

Последний вывод также правильный, но CR в имени файла интерпретируется как принудительное возвращение курсора в начало строки, поэтому все, что вы видите, это _selected_Bif.

Вы можете доказать это, удалив CR при чтении содержимого файла.

1
28.01.2020, 02:31

Теги

Похожие вопросы