마르코 Ceppi은 약 권리 awk
이것에 대한 더 나은 도구가되는하지만, AWK는보다 더 나은 도구 sort
와 uniq
그 논리에 이동 할 수 있기 때문에 awk
. 1000 줄을 테일링하는 경우 큰 차이가 없지만 거대한 멀티 공연 로그 파일을 보려면 파일을로 이동하는 것이 훨씬 빠릅니다 awk
.
cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n
필요한 것을 수행하지만 큰 파일의 경우 훨씬 빠릅니다. IP 주소를 키로 사용하고 IP가 값으로 발생하는 횟수를 사용하여 awk로 IP 배열을 만듭니다.
awk는 데이터를 한 번 통과하고 최종 출력을 정렬하는 것을 제외하고 대부분의 작업을 수행하기 때문에 속도가 향상됩니다. 다른 방법을 사용하여 전송 로그에 1,000,000 개의 회선이있는 경우 awk는 1,000,000 개의 IP를 분출하는 1,000,000 개의 회선을 읽은 다음 1,000,000 개의 IP 전체를 정렬하여 정렬합니다. 정렬하기 전에 데이터 양. 1,000,000 개의 IP에서 여러 패스를 파이핑 / 파이핑하는 대신 awk는 한 번의 패스로 거의 모든 것을 수행합니다.
내 노트북에서 5,513,132 라인 아파치 로그 (1.1 기가)를 사용하는 속도 비교는 다음과 같습니다.
- 2 분 45 초
cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
- 0 분 40 초
cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n