Isso é simples, curto e fácil de escrever, entender e verificar, e eu pessoalmente gosto disso:
grep -oE '\S+$' file
grep no Ubuntu , quando invocado com -E ou -P , recebe o < uma abreviação \s para significar um espaço em branco (na prática geralmente um espaço ou tab) e \S para significar qualquer coisa que não seja um. Usando o o quantificador + e a âncora de final de linha $ , o padrão \S+$ corresponde a um ou mais não-brancos no final de uma linha . Você pode usar -P em vez de -E ; o significado neste caso é o mesmo, mas um mecanismo diferente de expressões regulares é usado, então eles pode ter diferentes características de desempenho .
Isso é equivalente a Avinash Solução comentada de Raj (apenas com uma sintaxe mais fácil e mais compacta):
grep -o '[^[:space:]]\+$' file
Essas abordagens não funcionarão se houver espaço em branco após o número. Elas podem ser modificadas, mas não vejo sentido em entrar aqui. Embora às vezes seja instrutivo generalizar uma solução para trabalhar em mais casos, não é prático fazer isso com tanta frequência quanto as pessoas tendem a supor, porque geralmente não há como saber em quais das diferentes maneiras incompatíveis o problema pode acabar por ser generalizado.
O desempenho às vezes é uma consideração importante. Esta pergunta não estipula que a entrada é muito grande e é provável que todos os métodos publicados aqui sejam rápidos o suficiente. No entanto, caso a velocidade seja desejada, aqui está uma pequena referência em um arquivo de entrada de dez milhões de linhas:
$ perl -e 'print((<>) x 2000000)' file > bigfile
$ du -sh bigfile
439M bigfile
$ wc -l bigfile
10000000 bigfile
$ TIMEFORMAT=%R
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
819.565
$ time grep -oE '\S+$' bigfile > bigfile.out
816.910
$ time grep -oP '\S+$' bigfile > bigfile.out
67.465
$ time cut -d= -f2 bigfile > bigfile.out
3.902
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
815.183
$ time grep -oE '\S+$' bigfile > bigfile.out
824.546
$ time grep -oP '\S+$' bigfile > bigfile.out
68.692
$ time cut -d= -f2 bigfile > bigfile.out
4.135
Eu o executei duas vezes no caso de o pedido ser importante (como às vezes acontece em tarefas pesadas de E / S) e porque não tinha uma máquina disponível que não estivesse fazendo outras coisas em segundo plano que pudessem distorcer os resultados . A partir desses resultados concluo o seguinte, pelo menos provisoriamente, e para arquivos de entrada do tamanho que usei:
-
Uau! Passando -P (para usar PCRE ) em vez de -G (o padrão quando nenhum dialeto é especificado) ou -E fez grep mais rápido em uma ordem de grandeza. Portanto, para arquivos grandes, pode ser melhor usar esse comando do que o mostrado acima:
grep -oP '\S+$' file
-
WOW !! O método cut em resposta da αғsнιη , cut -d= -f2 file , é mais de uma ordem de magnitude mais rápida do que a versão mais rápida do meu caminho! Foi o vencedor no benchmark do pa4080 também, que cobriu mais métodos do que isso, mas com menor participação - e é por isso que Eu escolhi, de todos os outros métodos, para incluir no meu teste. Se o desempenho é importante ou os arquivos são enormes, eu acho que o método cut deve ser usado.
Isso também serve como um lembrete de que o simples cut e paste utilitários não deve ser esquecido , e talvez deva ser preferido quando aplicável, mesmo que existam ferramentas mais sofisticadas como grep que geralmente são oferecidos como soluções de primeira linha (e que eu pessoalmente estou mais acostumado a usar) .