Search code examples
bashshellloopsunixtail

Bash: use nth row as part of the command line


I am trying to use a tool called fastqtl, but it's probably less relevant here. I am interested in assigning each row of the "loc_info.txt" into the options. I wrote the following commands but it bounced back as "Error parsing command line :unrecognised option '-n+1'

Is there a way that I can make the fastQTL read and use that 1 line from "loc_info.txt" each time it runs the function?

Thanks for any suggestions!!

#!/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

Solution

  • You can use a subshell for this, if you want to use the output from one command within another command so something like:

    cmd1 -option $(cmd2)
    

    here you're using the cmd2 output as input in cmd. The key here is '$' and the subshell '()'. So the solution might be:

    #!/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