열 값을 기준으로 내 로그 파일을 여러 로그 파일로 분할하려면 어떻게 해야 합니까?

열 값을 기준으로 내 로그 파일을 여러 로그 파일로 분할하려면 어떻게 해야 합니까?

내 연결 로그 파일 구조는 다음과 같습니다.

호스트 이름 방향 타임스탬프 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서로 다른 연결에 대해 타이밍이 어떻게 변하는지 살펴보겠습니다.

추신: 데이터를 시각화하는 것은 이번이 처음이므로 저와 같은 구조로 로그 파일을 구성하는 더 현명한 방법이 있을 수 있습니다. 하지만 여기서 질문은 논의하기보다는 답변을 해야 하므로 로그 파일 분할을 변환하는 데 도움을 주십시오. 각 호스트 이름마다 하나씩 여러 로그 파일로 저장됩니다.

편집(2): Kalavan 덕분에 내 스크립트는 다음과 같습니다.

아, 파이프! 오, Bash의 힘! 좋아요! 내 전체 스크립트는 다음과 같습니다.

#!/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)의 인쇄를 생략합니다.

관련 정보