bash脚本:第一次迭代时for循环中断而没有解释

时间:2014-01-08 10:17:46

标签: bash for-loop while-loop

我正在尝试创建一个脚本,以便将文件分解为24.“infoband.dat”包含我要绘制的24个波段的数据,但不是分别编写每个波段,而是首先写入所有波段每个乐队的第1分,然后是所有第2分等。 我的脚本应该开始读取文件的每一行,而一遍又一遍地计数到24,直到文件结束。在for循环的第一次迭代中,它将创建一个文件,其中包含24个行块中的所有第一行,并且它成功完成。但第二次迭代甚至没有开始。什么打破了循环?

  1 #!/bin/sh
  2 grep frequency band.yaml > infoband.dat
  3 contadora=0
  4 for i in {1..24} #loop to create the band file, 24 is the no. of bands
  5 do
  6    contadora=$((contadora+1))
  7    contadorb=0
  8    contadorc=0
  9    while read line
 10       do
 11          contadorb=$((contadorb+1))
 12          if [ $contadorb -eq 25 ]
 13          then
 14             contadorb=1
 15             contadorc=$((contadorc+1))
 16          fi
 19          if [ $contadora -eq $contadorb ]
 20          then
 21             echo $contadora $contadorb $contadorc "$line" >> band_$contadora.dat
 22          fi
 23       done < infoband.dat
 24   echo "file of the band " $contadora "is finished"
 25 done

更新:我使用不同的方法完成了代码(变量contadorc是无用的btw):

  1 #!/bin/sh
  2 grep frequency band.yaml > infoband.dat
  3 nband=24
  4 contadorb=0
  5 contadorc=0
  6 while read line
  7 do
  8    contadorb=$((contadorb+1))
  9    if [ $contadorb -eq $((nband+1)) ]
 10    then
 11       contadorb=1
 12       contadorc=$((contadorc+1))
 13    fi
 14    echo " "$contadorb" "$line"    punto_q $contadorc">> test_infoband.dat
 15 done < infoband.dat
 16 for i in `seq 1 $nband`
 17 do
 18    echo $i $nband
 19    grep " $i " test_infoband.dat > banda_$i.dat
 20 done

2 个答案:

答案 0 :(得分:0)

您是否尝试使用“拆分”命令?

split -l 24 infoband.dat

答案 1 :(得分:0)

/bin/sh不进行大括号扩展,因此您的循环只有一次迭代,其中i设置为字符串{1..24}。将主题标签更改为/bin/bash和/或使用bash运行脚本,或使用

for i in $(seq 1 24)

(假设您的系统具有seq命令,否则您可能需要对列表进行硬编码,或使用while循环显式增加并测试i的值)。