我正在尝试创建一个脚本,以便将文件分解为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
答案 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
的值)。