Eu tenho um arquivo que está sendo gravado constantemente para / atualizado. Quero encontrar a última linha que contém uma palavra específica e, em seguida, imprimir a última coluna dessa linha.
O arquivo se parece com isso. Mais linhas A1 / B1 / C1 serão anexadas a ela ao longo do tempo.
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
Eu tentei usar
tail -f file | grep A1 | awk '{print $NF}'
para imprimir o valor 766, mas nada é produzido.
Existe uma maneira de fazer isso?
tail
fornece. A menos que você saiba que ele aparecerá com uma certa frequência, seria mais seguroawk '/A1/ {print $NF}' file | tail -n1
.Para imprimir a última coluna de uma linha, basta usar $ (NF):
fonte
Uma maneira de usar
awk
:fonte
awk
a sintaxe enigmática de :) :)Você pode fazer isso sem awk com apenas alguns tubos.
fonte
talvez isso funcione?
fonte
Você pode fazer tudo isso em
awk
:fonte
Usando Perl
fonte
perl -lane 'print $F[2] if /A1/' rayne.txt
awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1
Use
awk
com o separador de campos -F definido como um espaço "".Use o padrão
$1=="A1"
e a ação{print $NF}
, isso imprimirá o último campo em todos os registros em que o primeiro campo seja "A1". Canalize o resultado na cauda e use a-n 1
opção para mostrar apenas a última linha.fonte
Execute isso no arquivo:
e você conseguirá o que está procurando.
fonte
Não é o problema real aqui, mas pode ajudar alguém: eu estava fazendo
awk "{print $NF}"
, observe as aspas erradas. Deve serawk '{print $NF}'
, para que o shell não se expanda$NF
.fonte
ls -l | awk '{print $9}' | tail -n1
fonte