我这个问题超级新手,请大家帮下忙: 有一堆文件,名字从bactNOG00001.sto到bactNOG70000.sto,我要从bactNOG30000.sto 开始,执行一个hmmbuild的命令,原本的bash loop,假设直接开始,是这样的: for d in easel/bactNOG/*.sto; do hmmbuild --amino --fast $d.profile $d; done 下面我写的这个,从bactNOG00001开始执行hmmbuild,我知道为啥不对,因为计数应该 是在文件名里,但i计数不影响$d的计数: i=30000 for d in easel/bactNOG/*.sto; do let i+=1; hmmbuild --amino --fast $d. profile $d; done 那怎么在for loop里给文件名计数呢?谢谢啦!
我还看了这个的,看来没仔细看。 你说的是这个吗: #!/bin/bash for file in /etc/* do if [ "${file}" == "/etc/resolv.conf" ] then countNameservers=$(grep -c nameserver /etc/resolv.conf) echo "Total ${countNameservers} nameservers defined in ${file}" break fi done 其实我可以跳开前面几万个文件,类似底下这个方法: #!/bin/bash FILES="[email protected]" for f in $FILES do # if .bak backup file exists, read next file if [ -f ${f}.bak ] then echo "Skiping $f file..." continue # read next file and skip cp command fi # we are hear means no backup file exists, just use cp command to copy file /bin/cp $f $f.bak done
如果我能理解你要什么....我就帮你写了..看了3遍没看懂 你改一下我写的这个就行了 for x in `seq 30000 70000`;do echo bactNOG$x; done
x*a
21 楼
拜托 大公司又不是那么好进的
b*4
22 楼
祝福你,肯定能签过!
f*y
23 楼
`seq 30000 70000` needs lots of memory to hold the result. Suggest the following for ((i = 30000; i <= 70000; i ++)); do file="bactNOG$i.sto" # do whatever with $file done