Biostar Beta. Not for public use.
How to assign the result of a command to a variable in shell script?
0
Entering edit mode
13 months ago
dz2353 • 80

Hi, there

I want to assign the sample id to the output of trimmomatic but I failed. The name of the output is _clean.fastq and the variable j is missing. How can I figure out this issue? Thanks in advance!

for i in ./single/*.fastq
do
echo ${i}
j=$(echo ${i} | cut -d "." -f1)
java -jar /home/anaconda3/share/trimmomatic/trimmomatic.jar SE -phred33 ${i} ./single/${j}_clean.fastq ILLUMINACLIP:/home/anaconda3/share/trimmomatic/adapters/TruSeq3-SE.fa:2:30:10 SLIDINGWINDOW:4:15 LEADING:3 TRAILING:3 MINLEN:36
done
RNA-Seq • 223 views
ADD COMMENTlink
0
Entering edit mode

what are the names of the files, what are the errors, what are the messages, and what is the shell ?

ADD REPLYlink
0
Entering edit mode

Actually, I just want to test if this shell script works. There is only one .fastq file in the ./single directory named SRR222423.fastq. The input of trimming is SRR222423.fastq. And I want to get the output in the same directory with the name like SRR222423_clean.fastq. No error appears. The output is a .fastq file with the name _clean.fastq. There is no sample id SRR222423. The shell is bash.

ADD REPLYlink
1
Entering edit mode

if your input is really ./single/*.fastq

then

echo ${i} | cut -d "." -f1

will be an empty string... because the first char is just a dot...

ADD REPLYlink
0
Entering edit mode

Nope, I think the input is SRR222423.fastq and I split it by using dot. After that, I use -f1 to choose the first part then I get SRR222423. Is it correct?

ADD REPLYlink
3
Entering edit mode

If it generates expected output then it is correct. In this case. If you had more than one . in file names then you may get unexpected results. You could use basename instead.

ADD REPLYlink
2
Entering edit mode

I’d even say you should always use basename for things like this.

ADD REPLYlink
0
Entering edit mode

The command basename works well, thanks so much!

ADD REPLYlink
3
Entering edit mode
10 months ago
Prakash ♦ 1.2k
India

I hope you got the answer as Pierre suggested. you have just splitted the string based on dot. so spliting it based on "/" and then "." would work

j=$(echo ${i} | cut -d "/" -f3 | cut -d "." -f1)
ADD COMMENTlink
0
Entering edit mode

I tried but the output was {i}.fastq. The command basename provided by genomax works well. Thanks for your answer!

ADD REPLYlink
2
Entering edit mode

Then you would have more delimiter in you string. I tried to to reproduce similar to your input and it worked. yes basename is great idea indeed.

Screenshot-from-2019-04-30-09-24-13

ADD REPLYlink
0
Entering edit mode

Thank u for your reply in detail and I make sense how does it work!

ADD REPLYlink

Login before adding your answer.

Similar Posts
Loading Similar Posts
Powered by the version 2.1