Biostar Beta. Not for public use.
Question: How to assign the result of a command to a variable in shell script?
0
Entering edit mode

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
ADD COMMENTlink 9 months ago dz2353 • 70
Entering edit mode
0

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

ADD REPLYlink 9 months ago
Pierre Lindenbaum
120k
Entering edit mode
0

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 9 months ago
dz2353
• 70
Entering edit mode
1

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 9 months ago
Pierre Lindenbaum
120k
Entering edit mode
0

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 9 months ago
dz2353
• 70
Entering edit mode
3

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 9 months ago
genomax
68k
Entering edit mode
2

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

ADD REPLYlink 9 months ago
Michael Dondrup
46k
Entering edit mode
0

The command basename works well, thanks so much!

ADD REPLYlink 9 months ago
dz2353
• 70
3
Entering edit mode

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 9 months ago Prakash ♦ 1.2k
Entering edit mode
0

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

ADD REPLYlink 9 months ago
dz2353
• 70
Entering edit mode
2

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 9 months ago
Prakash
♦ 1.2k
Entering edit mode
0

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

ADD REPLYlink 9 months ago
dz2353
• 70

Login before adding your answer.

Similar Posts
Loading Similar Posts
Powered by the version 2.0