다음 줄을 포함하는 텍스트 파일이 있다고 가정해 보겠습니다.
192.168.1.1.55555
192.168.1.1.55555
192.168.1.1.5555
192.168.1.1.555
192.168.1.1.55
192.168.1.1.55
192.168.1.1.5
8.8.8.8.4433
8.8.8.8.443
8.8.8.8.443
8.8.8.8.25
192.168.1.2.99
위에서 볼 수 있듯이 각 행에는 다음과 같은 패턴이 있습니다(9.9599603594104e+16개의 가능한 행이 있기 때문에 가능한 모든 변형을 작성할 수는 없습니다).
[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 5 digits]
나는 처음 4개의 일치하는 숫자 행을 계산하고 그 수를 인쇄하는 grep/sort 문을 원합니다.
위 예의 예상 결과는 다음과 같습니다.
192.168.1.1 7
8.8.8.8 4
192.168.1.2 1
참고 사항:
출력을 정렬 하려고 하는데
netstat
실제로 처리 중인 행은 IP 주소와 포트 번호입니다.uniq
내 Unix 시스템에서 이 작업을 수행해야 하지만 도구가 없습니다cut
. freebsd를 기반으로 구축된 일부 네트워킹 공급업체의 운영 체제가 있습니다.
이 게시물의 댓글 작성자 중 한 명이 다음을 사용하도록 제안했습니다.
awk -F. '{c[$1 FS $2 FS $3 FS $4]++} END {for (i in c) print i, c[i]}'
이것은 잘 작동하는 것 같습니다.
답변1
$ cut -d'.' -f1-4 file | uniq -c
7 192.168.1.1
4 8.8.8.8
1 192.168.1.2
또는 입력이 예제에 표시된 대로 정렬되지 않았거나 출력 열의 순서가 중요한 경우:
$ cut -d'.' -f1-4 file | sort | uniq -c | awk '{print $2, $1}'
192.168.1.1 7
192.168.1.2 1
8.8.8.8 4