특정 숫자 패턴을 기준으로 행 정렬

특정 숫자 패턴을 기준으로 행 정렬

다음 줄을 포함하는 텍스트 파일이 있다고 가정해 보겠습니다.

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

참고 사항:

  1. 출력을 정렬 하려고 하는데 netstat실제로 처리 중인 행은 IP 주소와 포트 번호입니다.

  2. 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

관련 정보