Perhaps you could simplify this and show us what you are trying to achieve for the call to bowtie and describe the inputs (file list etc.) and what you want it to end up calling it with. It is a little hard work to decipher your code without any design or comments and I worry about missing something vital.
Can you just explain the logic you use to get the bowtie calls?
If all the commands to run are based with the 1 and 2 effectively being literal, could you do this:-
Code:
find . -type f | while read path_file # Or however you generate your file list
do
file="${path_file##*/}" # Get just the file bit, dropping the path
echo "command -1 ${path_file}_1 -2 ${path_file}_2 --un-conc-gz $file --several --others --parameters"
done
If it displays what you want, take out the echo and double quotes.
If I've missed the point, let me know where I've gone wrong and I will have another think.
You may want to write a Perl wrapper with the YAML library. Perl and YAML are really good at reading configuration files. You would then have a configuration file with all of the parameters that you need to make the bowtie2 call, you can parse all of the inputs and more simply change the inputs to what you need and make it work. It would probably be easier to read and understand then the approach you are taking. etc..etc..
Here is the install page for YAML. I am using Perl and YAML to build a software installer. The customer will only need to provide the response file to make it work. Which is much easier than handling each parameter separately. And I can directly reference any parameter as $yaml_hash->{field_name}.
@rbatte1
Seems perfect, I'll try it later on.
Update you on the results later on.
Many thanks!
---------- Post updated 07-11-14 at 11:46 AM ---------- Previous update was 06-11-14 at 05:51 PM ----------
@rbatte1
It works! After some slight changes (in bold) because of my files names
Code:
find ./path/ -type f | sed -e 's/_R.*$//' -e 's/_R//'|sort -u | while read path_file # Or however you generate your file list
do
file="${path_file##*/}" # Get just the file bit, dropping the path
echo "command -1 ${path_file}_R1_val_1.fq.gz -2 ${path_file}_R2_val_2.fq.gz --un-conc-gz $file --several --others --parameters"
done
@gandolf989
Thanks for the suggestion, actually the command is already a perl wrapper.
That is away ahead for my state of knowledge, hope to get there some day...
This User Gave Thanks to sargotrons For This Post:
Store args passed in array but not the first 2 args.
# bash
declare -a arr=("$@")
s=$(IFS=, eval 'echo "${arr}"')
echo "$s"
output:
sh array.sh 1 2 3 4 5 6
1,2,3,4,5,6
Desired output:
sh array.sh 1 2 3 4 5 6
3,4,5,6 (2 Replies)
Hi,
Can you please hint me how to achieve the below?
Input:
$./script.sh start 1 2
Internally inside the script i want to set a single variable with $2 and $3 value?
Output:
CMD=$1
ARGS=$2 $3
--VInodh (10 Replies)
Hi,
i have a perl script named test.pl. It is executed as
cat *.log|test.pl
i need the complete command line args. I tried using basename $0 but im getting test.pl only but not cat *.log...
Can anyone help me on this.
Thanks in advance (3 Replies)
I have this code, I thought it would automatically know the args sent to script when called from shell. But it seems to not see any...
main script:
. args
. errors
. opt
. clean
dbfile=""
opfile=""
# calls function in script below
chkarg
#check commands (2 Replies)
Hi,
I have to store all the command line arguments into an array.
I have the following code.
**********************
#! /bin/sh
set -A arr_no_updates
i=1
while
do
arr_no_updates=$($i)
echo ${arr_no_updates}
i=$(($i+1))
done**************** (1 Reply)
I have this while loop and at the end I am trying to get it to tell me the last argument I entered. And with it like this all I get is the sentence with no value for $1. Now I tried moving done after the sentence and it printed the value of $1 after every number. I don't want that I just want... (2 Replies)
I am trying to print command line arguments one per second. I have this
while
do
echo "6"
shift
echo "5"
shift
echo "4"
shift
echo "3"
shift
echo "2"
shift
echo "1"
shift
done (2 Replies)
My program usage takes the form for example;
$ theApp 2 "one or more words"
i.e. 3 command line arguments; application name, an integer, some text
My code includes the following 4 lines:
int anInteger;
char words;
sscanf(argv, "%d", &anInteger);
sscanf(argv, "%s", &message);
Based... (2 Replies)