Я пытаюсь использовать инструмент под названием fastqtl, но он, вероятно, здесь менее актуален. Я заинтересован в назначении каждой строки "loc_info.txt" в опциях. Я написал следующие команды, но они возвращались как «Ошибка синтаксического анализа командной строки: нераспознанная опция« -n + 1 »

Есть ли способ, которым я могу заставить fastQTL читать и использовать эту 1 строку из "loc_info.txt" каждый раз, когда она запускает функцию?

Спасибо за любые предложения!

#!/bin/bash

tool="/path/FastQTL-2.165.linux/bin/"
vcf="/path/vcf/"
out="/path/perm_out"

for i in {1..1061}
do
${tool}fastQTL.1.165.linux --vcf ${vcf}GT.vcf.gz --bed pheno_bed.gz --region tail -n+"$i" loc_info.txt --permute 1000 --out "$i"_perm.txt
done
2
Molly_K 24 Фев 2018 в 02:30

3 ответа

Лучший ответ

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

cmd1 -option $(cmd2)

Здесь вы используете вывод cmd2 в качестве ввода в cmd. Ключ здесь '$' и подоболочка '()'. Таким образом, решение может быть:

#!/bin/bash
tool="/path/FastQTL-2.165.linux/bin/"
vcf="/path/vcf/"
out="/path/perm_out"

for i in {1..1061}
do
${tool}fastQTL.1.165.linux --vcf ${vcf}GT.vcf.gz --bed pheno_bed.gz --region $(tail -n+"$i" loc_info.txt) --permute 1000 --out "$i"_perm.txt
done
1
Gustavo Topete 23 Фев 2018 в 23:37

Попробуйте заменить tail -n+"$i" loc_info.txt с $(head -n $i loc_info.txt | tail -n 1)

< Сильный > Пример

numOfLines=$(wc -l loc_info.txt | cut -d ' ' -f 1)

for i in $(seq 1 $numOfLines) 
do
${tool}fastQTL.1.165.linux --vcf ${vcf}GT.vcf.gz --bed pheno_bed.gz -
-region $(head -n $i loc_info.txt | tail -n 1) --permute 1000 --out "$i"_perm.txt
done
1
Ryan Henao 23 Фев 2018 в 23:55

Прочитайте файл в цикле:

i=1
while read -r line; do
    ${tool}fastQTL.1.165.linux --vcf ${vcf}GT.vcf.gz --bed pheno_bed.gz --region "$line" --permute 1000 --out "$i"_perm.txt
    ((i++))
done < loc_info.txt
3
Barmar 23 Фев 2018 в 23:40