2016-11-22 12 views
1

Я пишу скрипт PBS для обработки многих файлов одновременно и выполнения нескольких действий.Вывод команды как переменной

Я хотел бы начать с распаковки файлов .gz (которые я позже запечатал), а затем обработать распакованный файл.

Ниже будет распаковать файл в $file, но я когда-то я расстегнула файл, я хотел бы переменной $file обратиться к распакованной версии:

for file in $READS/*2.fq.gz; 
do 
    gunzip $file 
    # continue script with the gunzipped file 
done 

Что-то вроде:

for file in $READS/*2.fq.gz; 
do 
    file=gunzip $file 
    # continue script with the gunzipped file 
done 
+0

Что делает ваш заголовок имеет отношение к вопросу? Вывод команды не является именем файла. 'gunzip' не производит никакого вывода, он просто распаковывает файл молча. – Barmar

ответ

3

Вы хотите удалить .gz суффикс на $ файла:

file=${file%.gz} 

Обратите внимание, что вы, вероятно, также хотите проверить результат команды Gunzip, чтобы увидеть, если это не удалось:

for file in $READS/*2.fq.gz; 
do 
    if gunzip $file; then 
     file=${file%.gz} 
     # continue script with the gunzipped file 
    else 
     # gunzip failed (corrupt file?) and already output an error message 
     # try to recover? 
    fi 
done 
+0

Когда сценарий становится больше, надеюсь, нет, это будет труднее проследить, потому что одна и та же переменная в цикле изменяется внутри. Используйте отдельную локальную переменную или просто продолжайте ссылаться на '$ {file% .gz}'. – alvits