Imprima o último campo, mas um

1

Como imprimir a palavra antes da última palavra em linha (com ksh ou awk ou sed ou perl one liner)

Exemplo 1:

  echo one two three

imprimirá "dois"

Exemplo 2:

 echo 1 2 3 4 5 6

imprimirá "5"

    
por lgeorget 12.03.2014 / 13:29

3 respostas

7

com o awk:

awk '{ print $(NF-1) }'

NF é o número de campos - tudo o que acontece aqui é que um é subtraído do comprimento total do campo para obter o penúltimo campo.

Com perl:

perl -lane 'print $F[-2]'

Uma matriz contendo os campos é criada como @F (é o que o -a faz) e obtemos o valor do segundo último campo (com o índice -2 ).

O uso do sed é um pouco menos palatável, já que não possui nenhum conceito de campo. Eu recomendaria usar uma das opções acima, em vez disso.

    
por 12.03.2014 / 13:30
3

Eu coloco o abaixo em um subshell para que você não mude muito seu ambiente atual - eles são todos internos do shell nativo.

(set -f; unset IFS ; set -- ${line}
 shift "$((${#}${2+-2}))" && printf ${2+%s}'\n' "$1")

Eu editei isso para proibir globbing - adicionei set -f de acordo com os conselhos oferecidos nos comentários abaixo.

    
por 12.03.2014 / 14:58
1

rev | cut -d ' ' -f 2 | rev

ou

rev | awk '{print $2}' | rev

    
por 12.03.2014 / 15:05

Tags