Podemos imprimir a última coluna de cada linha em um arquivo usando $NF
se não soubermos o número da última coluna.
Mas estou enfrentando dificuldades porque a última coluna tem um valor vazio.
Por exemplo,who
comando de análise
$ who
root tty1 2018-01-25 09:36
root pts/0 2018-05-30 07:39 (192.168.1.134)
root pts/1 2018-05-28 23:12 (192.168.1.134)
root pts/2 2018-06-01 10:01 (192.168.1.188)
Obtendo resultado:
$ who | awk '{print $NF}'
09:36
(192.168.1.134)
(192.168.1.134)
(192.168.1.188)
resultado esperado
(192.168.1.134) (192.168.1.134) (192.168.1.188)
Deixe-me saber as possibilidades de obter o resultado esperado em uma linha.
EDIT 1: O cenário acima é apenas um exemplo. Eu não gosto de mudar o delimitador para alcançar o resultado.
EDIT 2: nada (uma linha vazia de saída) das linhas que possuem menos campos que o máximo
Para gerar apenas a última coluna de linhas com o número máximo de colunas, você pode fazer algo como:
Para gerar uma linha para cada linha de entrada, mas vazia para linhas que não possuem o número máximo de colunas:
Se você quiser o último campo apenas das linhas com mais campos, precisará ler os dados duas vezes: uma para descobrir o maior número de campos e outra para imprimir os campos. Ler apenas uma vez não resolve: qualquer linha pode ter mais campos do que as anteriores e não há como saber.
Com
awk
(observe que o nome do arquivo é fornecido duas vezes):Se
file
contémisso imprime o quarto campo ou vazio para as linhas que não o possuem:
Isso, claro, não funciona com um pipe, você terá que usar um arquivo temporário.
Uma solução alternativa poderia armazenar em cache os campos a serem impressos até que apareça uma linha com mais campos, como na resposta de Stéphane .
Verifique se o 5º campo corresponde a
\(.*\)
, e imprima-o se corresponder.Se você estiver interessado apenas em
ip
endereços, altere o regex:Se você deseja obter apenas a última coluna se esta coluna estiver disponível, use o fato de que as linhas que você não deseja ter apenas quatro colunas:
ou, para obter dados semelhantes,