o******n 发帖数: 511 | 1 我这个问题超级新手,请大家帮下忙:
有一堆文件,名字从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里给文件名计数呢?谢谢啦! |
s***o 发帖数: 6934 | 2 google result first one 'bash for loop'...
http://www.cyberciti.biz/faq/bash-for-loop/ |
o******n 发帖数: 511 | 3 我还看了这个的,看来没仔细看。
你说的是这个吗:
#!/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="$@"
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 |
w****k 发帖数: 6244 | 4 给文件名计数是什么意思?
你说清楚你想要什么output吧
sto
done
【在 o******n 的大作中提到】 : 我这个问题超级新手,请大家帮下忙: : 有一堆文件,名字从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里给文件名计数呢?谢谢啦!
|
i***r 发帖数: 1035 | 5 you can use an array
FILE=(*.sto)
i=3000
while [ $i -lt 7000 ]
do
echo ${FILE[$i]}
done |
c****f 发帖数: 1102 | 6 如果我能理解你要什么....我就帮你写了..看了3遍没看懂
你改一下我写的这个就行了
for x in `seq 30000 70000`;do echo bactNOG$x; done |
f**y 发帖数: 138 | 7 `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 |
v*******e 发帖数: 11604 | 8 楼主,学这个是浪费生命。直接使用python或者perl解决。学一天就上手,做完了你的
bash script还没写好呢。 |
o******n 发帖数: 511 | 9 谢谢楼上各位,我周末忘记来回帖了。我后来用了二楼链接里一个例子的办法,绕过前
30000个文件再执行hmmbuild命令,就好了。
我本来的问题是,文件名是bactNOG00001,bactNOG00002等等,怎么在for loop里在这
些文件名里用上类似i=1,i=i+1的计数器。6,7楼的回复就是这个意思。:) |