O arquivo de registro de minhas conexões está estruturado da seguinte forma:
hostname direction timestamp bps
Aqui está um fragmento do meu arquivo de log:
www.youtube.com DOWNLOAD 1479897661131903 23508910
www.youtube.com UPLOAD 1479897661131922 735
fonts.gstatic.com DOWNLOAD 1479897660289990 527
ssl.gstatic.com UPLOAD 1479897660152435 2094
fonts.gstatic.com DOWNLOAD 1479897660290973 6662177
Eu quero classificá-lo de acordo com o timestamp e o hostname: Eu tentei
sort -k 3 -o sortedTimestamps.log connectionLog.txt
e o resultado é
ssl.gstatic.com UPLOAD 1479897660152435 2094
fonts.gstatic.com DOWNLOAD 1479897660289990 527
fonts.gstatic.com DOWNLOAD 1479897660290973 6662177
www.youtube.com DOWNLOAD 1479897661131903 23508910
www.youtube.com UPLOAD 1479897661131922 735
Agora, isso é apenas uma amostra: há mais e mais linhas e, por enquanto, com o sort
acima, o arquivo de log é apenas classificado por timestamp. Como preciso plotar isso, gostaria de ter arquivos de log diferentes de acordo com hostname
e direction
, contendo timestamp
e bps
.
O resultado final seria ter um arquivo de log para cada hostname
:
www.youtube.com_DOWNLOAD_log
,
www.youtube.com_UPLOAD_log
,
fonts.gstatic.com_DOWNLOAD_log
,
fonts.gstatic.com_UPLOAD_log
e assim por diante; cada arquivo de log deve conter apenas duas colunas, classificado timestamp
e seu correspondente bps
.
Por exemplo: www.youtube.com_DOWNLOAD_log
contém:
timestamp1 bps1
timestamp2 bps2
timestamp3 bps3
...
Plotando isso em um gráfico, o eixo X seria timestamp
e o eixo Y bps
. Eu vou plotar todos juntos e ver como bps
muda no tempo para várias conexões.
PS: esta é minha primeira tentativa de visualizar dados, então pode haver uma maneira mais inteligente de plotar um arquivo de log estruturado como o meu, mas como aqui as perguntas devem ser respondidas e não discutidas, me ajude a dividir meu arquivo de log em vários arquivos de log, um para cada direção de nome de host.
Edit (2) : graças a Kalavan, aqui está meu script:
Oh, o cachimbo! Oh, o poder do Bash! Eu amo isso! Aqui está meu script completo:
#!/bin/bash
echo -e "\nCleaning previous log files...\n"
rm *.log
# File name: HOSTNAME_DIRECTION.log
sort -k1 -k3n connectionLog.txt | awk '{print $3 " " $8 >> $1"_"$2".log"}'
to_plot_upload_files="plot "
to_plot_download_files=" plot "
for file in $(ls *UPLOAD.log); do
to_plot_upload_files="$to_plot_upload_files \"$file\" using 1:2 with lines, "
done
for file in $(ls *DOWNLOAD.log); do
to_plot_download_files="$to_plot_download_files \"$file\" using 1:2 with lines, "
done
echo $to_plot_upload_files | gnuplot -persist
echo $to_plot_download_files | gnuplot -persist