列の値に基づいてマイログファイルを複数のログファイルに分割するにはどうすればよいですか?

列の値に基づいてマイログファイルを複数のログファイルに分割するにはどうすればよいですか?

私の接続ログファイルの構造は次のとおりです。

ホスト名方向タイムスタンプbps

これは私のログファイルの一部です。

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

タイムスタンプとホスト名に基づいてソートしたいです。

sort -k 3 -o sortedTimestamps.log connectionLog.txt

明らかにする

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

これは単なる例です。行数が増えており、現在のsortログファイルはタイムスタンプでソートされています。これをプロットする必要があるので、に基づいて、およびを含む他のhostnameログファイルをしたいと思います。directiontimestampbps

最終結果はそれぞれのログファイルですhostname

www.youtube.com_DOWNLOAD_log

www.youtube.com_UPLOAD_log

fonts.gstatic.com_DOWNLOAD_log

fonts.gstatic.com_UPLOAD_log

など、各ログファイルに並べ替えられた列とtimestamp対応するbps

例: 以下をwww.youtube.com_DOWNLOAD_log含みます。

timestamp1 bps1
timestamp2 bps2
timestamp3 bps3
...

x軸にtimestamp、y軸にを使用してチャートにそれをプロットしますbps。私はそれらをすべて一緒にプロットし、異なる接続のタイミングがどのようにbps変化するかを見てみましょう。

PS:データを視覚化するのは今回が初めてなので、私と同じ構造でログファイルを整理するより賢い方法があるかもしれません。しかし、ここで質問は議論するのではなく答える必要があるので、ログファイルの分割を変換するのに役立ちます。ホスト名ごとに1つずつ、複数のログファイルとして保存されます。

編集(2):Kalavanのおかげで、私のスクリプトは次のようになります。

ああ、パイプ!ああ、バッシュの力!いいね!私のスクリプト全体は次のとおりです。

#!/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

ベストアンサー1

まず、次のことを試してください。必要に応じてさらに調整できます。

sort -k1 -k3n connectionLog.txt | awk '{print $1 " " $3 " " $4 >> $1".log"}'

編集する:

ホスト名がログに含まれたくないことを逃しました。最初のフィールド($ 1)の印刷を省略します。

おすすめ記事