seq - erro de argumento de ponto flutuante inválido

1

Eu tenho um arquivo com muitos números, com cada número em uma linha. Meu objetivo é encontrar os números que estão faltando. Estou tentando gerar a sequência de todos os números com seq

start=$(head -1 numbers.txt)
finish=$(tail -1 numbers.txt)
seq $start $finish > all_numbers.txt

Eu recebo a seguinte mensagem de erro

seq: invalid floating point argument: 4106
Try 'seq --help' for more information.

Estou confuso porque o 4106 não é claramente um número de ponto flutuante.

Depois disso, pretendo usar o diff para encontrar os números que faltam. Alguém pode me dizer por que o seq está se comportando dessa maneira?

    
por nikhil 04.10.2012 / 12:03

1 resposta

5

Provavelmente há um caractere oculto após 4106, provavelmente um retorno de carro se o arquivo vier do mundo da Microsoft que você precisaria despir primeiro (ou fazer a coisa toda com awk ).

$ seq 1 $'2\r'
seq: invalid floating point argument: 2
Try 'seq --help' for more information.
$ echo seq 1 $'2\r'
seq 1 2

Está lá, mas você não pode ver. Quando a saída para um terminal, ele (normalmente) só move o cursor para o início da linha.

Com ksh93, zsh ou bash, tente:

printf '<%q>\n' "$start"

para ver o que ele contém.

    
por 04.10.2012 / 12:52