how can I create a loop where the command line arguments change (increase) and every time the number of arguments is different ?
### I have many gene names... that mean gene1=$2, gene2=$3, ...... geneN=$N+1
### some time the number of gene is 25, other time 56, ecc...
#!/usr/bin/env bash
file=$1 #File name
gene=$2 #Gene name
for ((b=2; b<=????; b++))
do
snpl=${gene}"_snplist.txt"
snpc=${gene}"_snpcount.txt"
#SNP list
grep -w $gene $file > count/$file/$snpl
#SNP count
grep -w $gene $file | wc -l > count/$file/$snpc
done
Hi, echo manolis
What would provide that information? Do you read it from a file? Do you enter the _number_ of genes at the command line as a parameter?
I dunno what he's up to. That is his question. All could be automated and generated. Of course scripting is mostly to reduce work and more seldom to do otherwise. If he'd like to have some improvement advices, he'll offer more details, so the solution could be stated and tips can be offered.
I'm asking myself even if there's a mess of tons of files behind this gene-scenario, a type of task which I read quite often in the short time I'm here - which overall slows down that search- and calculation-operations by factor 10 - 10 Billion compared to some less Shellcentric/Multi-Filecentric solution.
Ithink the only really sensible consruct to use is a while -loop instead of a for -loop, like this:
while [ -n "$1" ] ; do
echo "argument for this pass: $1"
shift
done
This will cycle through all the presented positional parameters and "chop them off" one by one. A sample run of this code would look like:
$ mycode a b cde "f g h" i jkl
argument for this pass: a
argument for this pass: b
argument for this pass: cde
argument for this pass: f g h
argument for this pass: i
argument for this pass: jkl
$