Imprimir último elemento de cada linha [duplicado]

5

Como se pode imprimir o elemento após a última guia em um arquivo?

Exemplo: Arquivo1

A    3    8    6    7
B    4    6    2    3    6    8
c    1    9

retornaria:

7
8
9
    
por dovah 21.07.2014 / 12:28

5 respostas

15

Você pode fazer uso inteligente da variável NF em awk

awk '{print $NF}' File1

De man awk

NF The number of fields in the current input record.

Portanto, NF fornecerá a quantidade de campos e $NF expandirá para $3 , por exemplo, que você pode usar em uma declaração impressa.

    
por 21.07.2014 / 12:30
4

Se você quiser apenas o último campo e não o primeiro e o último, tente:

rev file | cut -f 1

O rev inverte cada linha do arquivo e o cut imprime apenas o primeiro campo (os campos são definidos por tabulações por padrão). Como a linha foi invertida, o primeiro campo é o último campo original.

O exemplo acima funciona no seu exemplo dado, mas, como aponta o @Bernhard abaixo, ele irá imprimir campos maiores que um único caractere invertido. Nesses casos, você precisará de uma segunda rev:

 rev file | cut -f 1 | rev
    
por 21.07.2014 / 12:55
4

Você pode usar sed para tal operação:

sed 's/.* //' file # where ' ' -- is your delimiter

Ele excluirá todos os símbolos antes do delimitador. Se o seu arquivo estiver separado por tabulações, use:

sed 's/.*\t//' file
    
por 21.07.2014 / 13:42
2

A resposta de Bernhard é a correta. Para diversão e perfeição, bash:

while read -a fields; do
    echo ${fields[-1]}
done < file
    
por 21.07.2014 / 15:18
1

awk é realmente a ferramenta para o trabalho aqui, mas por questão de integridade aqui está um GNU grep way

grep -oE '[^[:space:]]+$' file
7
8
9
    
por 21.07.2014 / 14:22

Tags