Issue
I would like to execute a command with each list from a text file. I tried doing this code but it is not giving me any output. Can you help me? Thank you!
for i in $(cat list_of_text.txt)
do
commandtool some_input_file $i> new_"$i".fa
cat > final.list
echo -e "new_"$i"\t+" >> final.list
done
list_of_text.txt looks like this
nameabc
namedef
nameghi
namejkl
while final.list looks like this
new_nameabc.fa +
new_namedef.fa +
new_nameghi.fa +
new_namejkl.fa +
In summary the long version of the code is like this and I'm trying to make a shortcut:
commandtool some_input_file nameabc> new_nameabc.fa
commandtool some_input_file namedef> new_namedef.fa
commandtool some_input_file nameghi> new_nameghi.fa
commandtool some_input_file namejkl> new_namejkl.fa
echo -e "new_nameabc.fa\t+" > final.list
echo -e "new_namedef.fa\t+" >> final.list
echo -e "new_nameghi.fa\t+" >> final.list
echo -e "new_namejkl.fa\t+" >> final.list
Edit: It is working now. I just replaced cat > final.list
to echo > final.list
and moved it at the beginning as suggested in the answer.
Solution
> final.list
while IFS= read -r name; do
new_name=new_${name}.fa
cmd input-file "$name" > "$new_name"
printf '%s\t\n' "$new_name" >> final.list
done < list_of_text.txt
> final.list
truncates (empties) the file before it gets appended.while IFS= read -r line; ...
loop is the canonical method of processing one line of an input stream at a time. It is also far more robust compared to looping over an unquoted command substitution.< list_of_text.txt
redirects the list as input for the while read loop.
Answered By - dan Answer Checked By - Marie Seifert (WPSolving Admin)