Como posso determinar a última linha de “while read line”?

3

Como posso determinar a última linha de "while read line"?

por exemplo:

    while read line; do
       if [ "$line" = "last line" ]; then
           echo "this line is the last one ($line);"
       else
           echo "$line"
       fi

    done <<< "$lines"
    
por teslasimus 09.02.2013 / 15:41

1 resposta

3

Existe um problema aqui se você tiver uma entrada que não seja previsível (por exemplo, entrada manual). A menos que você possa dizer o futuro, você não pode trivialmente (ou seja, através do while read line construct) saber o que é o último. Além disso, uma vez que o loop pára quando a entrada é interrompida, você terá que armazenar uma determinada linha e agir sobre ela após sua "volta no loop". Não antes disso, você pode saber se foi o último. Se a entrada for uma string ou arquivo fixo, é mais uma consideração teórica do que prática.

Um protótipo para fazer o que você quer:

unset lastline
while read line; do
    if ! [ -z "$lastline" ]; then
        echo "$lastline"
    fi
    lastline=$line
done <<< "$lines"
echo "This is the last one: $lastline"
  • unset lastline é apenas para "proteger você" se você executar o mesmo script, por exemplo, um terminal várias vezes, já que $lastline pode não estar vazio para começar. Você também pode limpá-lo após o último echo se isso puder ser um problema.
  • ! [ -z "$lastline" ] retornará true se a variável $lastline não estiver vazia (tecnicamente, se o comprimento da string não for zero). Veja man test se você não está acostumado a esses testes.

(Embora meu instinto queira perguntar o que você realmente está tentando fazer a> :-).)

    
por 09.02.2013 / 15:56

Tags