Imprime várias linhas no mesmo arquivo através de um loop for no bash

0

Eu gostaria de perguntar a você como posso adicionar um conjunto de strings contendo três valores cada um, um após o outro, no mesmo arquivo (por exemplo, CONV.inp)?

Gostaria de digitar o número N de linhas com os respectivos valores, como aqui:

...

5.834,-54.05,0  
7.728,-10.35,0  
7.796,-14.85,0  
7.871,-4.85,0  
9.397,7.09,0  

...

O último 0 nunca muda. Eu seria capaz de digitar os dois valores de cada linha, e apenas e somente quando terminar, digitando uma letra aleatória para sair do loop no bash.

...

echo -en '\n'
echo "1"
echo -en '\n'
read A
read B
echo "$A,$B,0" >> CONV.inp

echo -en '\n'
echo "2"
echo -en '\n'
read C
read D
echo "$C,$D,0" >> CONV.inp

echo -en '\n'
echo "3"
echo -en '\n'
read E
read F
echo "$E,$F,0" >> CONV.inp 
...

Alguém tem uma ideia de como implementar um loop com esses recursos?

Obrigado antecipadamente!

    
por Tommy 08.03.2017 / 19:06

1 resposta

0

O que você quer, efetivamente, é ter um estilo de loop no estilo do-script e usar read variable1 variable2 para ler os dois valores de uma só vez.

#!/bin/bash

# get rid of output_file.txt if it exists, write new file
# This is optional
[ -f output_file.txt  ] && rm output_file.txt

# Read input once, then go into loop and start testing
# User's input
counter=0
read -p "Enter line #$counter or q to quit:" v1 v2
while [ "$v1" != "q"  ]
do
    printf "%s,%s,0\n" "$v1" "$v2" >> output_file.txt
    counter=$(( $counter+1))
    read -p "Enter line vs #$counter or q to quit:" v1 v2
done

Execução de teste:

$ ./read_double_input.sh                                                                                                 
Enter line #0 or q to quit:5.834 -54.05
Enter line vs #1 or q to quit:7.728 -10.53
Enter line vs #2 or q to quit:7.96 -14.85
Enter line vs #3 or q to quit:q

$ cat output_file.txt
5.834,-54.05,0
7.728,-10.53,0
7.96,-14.85,0
    
por 08.03.2017 / 19:46

Tags