imprime o último campo da linha + alternativa para awk

3

Devido a motivos técnicos em minha máquina Solaris, não posso usar awk para imprimir o último campo na linha.

Quais são as outras alternativas para awk que imprimem o último campo da linha (usando cut ou tr ... etc)?

Exemplo 1:

/usr/bin/hostname
machine1b
/usr/bin/hostname  | /usr/bin/sed 's/\(.\{1\}\)/ /g' |  /usr/bin/awk  '{print $NF}'
b

Exemplo2

echo 1 2 3 4 5 | /usr/bin/awk  '{print $NF}'

5
    
por yael 02.04.2013 / 11:02

4 respostas

5

Perl

echo foo bar baz | perl -pe 's/.*[ \t]//'

Se você tiver que retirar primeiro os espaços iniciais, faça assim:

echo "foo bar baz " | perl -lpe 's/\s*$//;s/.*\s//'

O seguinte foi contribuído por mr.spuratic em um comentário:

echo "foo bar baz " | perl -lane 'print $F[-1]'

Bash

echo foo bar baz | while read i; do echo ${i##* }; done

ou é bash não é seu shell padrão:

echo foo bar baz | bash -c 'while read i; do echo ${i##* }; done'

Se você tiver que remover um único espaço à direita primeiro, faça

echo "foo bar baz " | while read i; do i="${i% }"; echo ${i##* }; done

tr e cauda

echo foo bar baz | tr ' ' '\n' | tail -n1

embora isso só funcione para uma única linha de entrada, em contraste com as soluções acima. Suprimindo espaços à direita nessa abordagem:

echo "foo bar baz " | tr ' ' '\n' | grep . | tail -n1
    
por 02.04.2013 / 11:36
2

Usando o corte:

Último campo:

echo 1 2 3 4 5 | rev | cut -f1 -d ' '

Último caractere:

echo 1 2 3 4 5 | rev | cut -c1
    
por 02.04.2013 / 14:21
2

echo hello my friend | tac -s' ' | tr '\n' ' ' | cut -d' ' -f 1

    
por 02.04.2013 / 17:16
0

Algo como isso deve funcionar:

sed -E -e 's/.* ([^ ]+)$//'

% echo 1 2 3 4 5 | sed -E -e 's/.* ([^ ]+)$//'
5
    
por 02.04.2013 / 11:24