
Estou tentando esse while
loop simples no bash.
Meu arquivo de texto
# cat test.txt
line1:21
line2:25
line5:27
These are all on new line
Meu roteiro
# cat test1.sh
while read line
do
awk -F":" '{print $2}'
done < test.txt
Saída
# ./test1.sh
25
27
A saída não está imprimindo o $2
valor da primeira linha. Alguém poderia me ajudar a entender esse caso?
Responder1
Você não precisa desse loop:
$ awk -F ':' '{ print $2 }' test.txt
21
25
27
awk
processará a entrada linha por linha.
Com o seu loop, read
obterá a primeira linha do arquivo, que é perdida porque não é usada/emitida. O awk
irá então assumir a entrada padrão do loop e ler as outras duas linhas no arquivo (portanto, o loop fará apenas uma única iteração).
Seu loop, anotado:
while read line # first line read ($line never used)
do
awk -F ':' '{ print $2 }' # reads from standard input, which will
# contain the rest of the test.txt file
done <test.txt
Responder2
Consegui corrigir seu código adicionando echo
. A razão para isso foi descritalá, questione por que está imprimindo outros dois valores.
while read line;
do
echo "$line" | awk -F":" '{print $2}'
done < test.txt
Responder3
while IFS=":" read z x; do
echo $x;
done<test.txt
ou
sed "s/^.*://g" test.txt