I'm new to Bash scripting. My script intended role is to access a provided path and then apply some software (RTG - Real time Genomics) commands on the data provided in that path. However, when I try to execute the bash from CLI, it gives me following error
ERROR:There were invalid input file paths
The path I have provided in the script is accurate. That is, In the original directory, where the program 'RTG' resides, I have made folders accordingly like /data/reads/NA19240 and placed both *_1.fastq and *_2.fastq files inside NA19240.
Here is the script,
#!/bin/bash
for left_fastq in /data/reads/NA19240/*_1.fastq; do
right_fastq=${left_fastq/_1.fastq/_2.fastq}
lane_id=$(basename ${left_fastq/_1.fastq})
rtg format -f fastq -q sanger -o ${lane_id} -l ${left_fastq} -r ${right_fastq} --sam-rg "@RG\tID:${lane_id}\tSM:NA19240\tPL:ILLUMINA"
done
I have tried many workarounds but still not being able to bypass this error. I will be really grateful if you guys can help me fixing this problem. Thanks
Here is the link for RTG Program: https://github.com/RealTimeGenomics/rtg-core
1 answer
As far as I can see, there are several syntax errors in your script. Also, I assume you are trying to replace _1.fastq with _2.fastq to get your right fastq file? The syntax you used simply appends _2.fastq, does not substitute. Instead, a simpler although longer approach is as follows.
Step 1: Store your base fastq file names in a file
$ ls /data/reads/NA19240/*_1.fastq | perl -pe 's/_1.fastq//' > file_list
Step 2: Use the following script instead
#!/bin/bash
for lane_id in `cat file_list`; do
left_fastq=${lane_id}_1.fastq
right_fastq=${lane_id}_2.fastq
rtg format -f fastq -q sanger -o $lane_id -l $left_fastq -r $right_fastq --sam-rg "Blah Blah"
done
What you are essentially doing is having a list of base names, from which you will create your left and right files to run the command. Let me know if this works.
Cheers,
TEJ
Log in to answer this question.
run your script with the following line:
That way you can easily see what's going wrong, always use
set -eu