como analisar um arquivo que é alterado continuamente usando o awk?

3

por exemplo, se tivermos um arquivo, contenha:

Hello world
Hello earth
Hi everybody

podemos analisá-lo facilmente para que as primeiras e segundas colunas das linhas contenham a palavra Hello usando awk :

awk '/Hello/ { print $1 }' file
awk '/Hello/ { print $2 }' file

E se o conteúdo do arquivo for alterado:

Hello world
Hello earth
Hi everybody
Hello sky
Hi madame
Hello USA

Como podemos analisar apenas as novas entradas adicionadas a este arquivo (usando awk ):

Hello sky
Hi madame
Hello USA

sem analisar novamente as informações já analisadas?

Hello world
Hello earth
Hi everybody
    
por Networker 02.06.2014 / 00:54

2 respostas

3

Você pode usar dois arquivos:

if [ -e checkfile ]; then
  lines=$(wc -l <checkfile)
else
  lines=0
fi
# read all new lines from source file and append them to target file
sed -n $((lines+1)),\$p file >>checkfile
awk '...' checkfile
    
por 02.06.2014 / 02:06
2

Você pode enviar o conteúdo do arquivo via tail -f (ou tail -F ), por exemplo,

tail -f file | awk '...'

Na página tail man:

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent
    
por 02.06.2014 / 01:04