Я пытаюсь создать скрипт, чтобы разбить файл на 24. «infoband.dat» содержит данные из 24 полос, которые я хочу построить, но вместо того, чтобы записывать каждую группу по отдельности, она сначала записывает все 1-ю точки каждой полосы, затем все 2-е и т. д. . Мой скрипт должен был начинать читать каждую строку файла, в то время как считать 24 снова и снова до тех пор, пока конец файла. На первой итерации цикла for он создаст файл со всеми первыми строками из этих 24 строк строки, и он сделает это успешно. Но вторая итерация даже не начинается. Что нарушает цикл?bash script: для перерывов цикла на первой итерации без объяснения причин
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 бесполезно кстати):
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
Я просто подумал об обходном пути ... хотя мне интересно узнать, почему этот цикл не работает. –
Вам не нужно перезаписывать противоречие, иначе строка 19 будет иметь значения, такие как 25, 26, 27 .... после первого цикла. Удачи. – shellter