Como você sabe que está na última linha quando faz um loop através de um arquivo?

4

Eu tenho um arquivo chamado listing.txt Ele contém dados como:

1
2
3
4
5

Eu então uso o seguinte para percorrer o arquivo e fazer coisas com cada linha:

IFS=$'\n'
while IFS= read -r inc; do
    if [ $inc -eq 1 ]
    then
        echo "FIRST: $inc"
    else
        echo "MID: $inc"
    fi
done </home/user/listing.txt

Mas não consigo encontrar uma opção para verificar se é a última linha. Qual é a melhor maneira de descobrir se estou na última linha?

Eu vi várias páginas falando sobre loops e páginas falando sobre como obter a última linha de um arquivo, mas nada que ajude meu loop a saber que está na última linha.

    
por IGGt 10.07.2015 / 16:39

2 respostas

4

O que significa estar na última linha? Isso significa que não há linhas depois dessa, então uma estratégia seria verificar se há outra linha após a atual dentro do loop. Se você não está na última linha, senão você está no meio.

Outra técnica seria manter a linha em uma variável com escopo fora do loop e, quando o loop terminar, a variável conterá a última linha. Isso tem a desvantagem de tornar o cálculo do meio incorreto, mas você provavelmente encontrará uma maneira de contornar isso.

    
por 10.07.2015 / 16:57
1

Reiterando o que o WAF disse nos comentários, você pode usar wc para buscar o número de linhas antes do loop e testá-lo para capturar a última linha:

IFS=$'\n'
last=$(</home/user/listing.txt wc -l)
while IFS= read -r inc; do
    if [ $inc -eq 1 ]
    then
        echo "FIRST: $inc"
    elif [ $inc -eq $last ]
        echo "LAST: $inc"
    else
        echo "MID: $inc"
    fi
done </home/user/listing.txt
    
por 10.07.2015 / 18:09