Unix - 고유한 IP 주소를 계산하여 가장 일반적인 순으로 정렬하고, 반복 횟수가 동일한 경우 IP별로 정렬합니다.

Unix - 고유한 IP 주소를 계산하여 가장 일반적인 순으로 정렬하고, 반복 횟수가 동일한 경우 IP별로 정렬합니다.

내 파일에 IP 주소 목록이 있습니다.

  72.204.55.250
  72.204.55.250
  72.204.55.250
  72.204.55.250
  72.204.55.250
  96.41.51.202
  208.115.113.91
  178.137.94.166
  178.137.94.166
  208.115.113.91
  96.41.51.202
  141.8.143.179
  141.8.143.179

이제 그것들을 분류하고 uniq -c서비스에 전화하면 다음과 같은 결과를 얻습니다.

  2  141.8.143.179
  2  178.137.94.166
  2  208.115.113.91
  5  72.204.55.250
  2  96.41.51.202

이제 가장 빈번한 순서( )로 정렬해 보겠습니다. sort -rn그런데 문제는 반복 횟수가 동일할 때 IP 주소를 기준으로 내림차순으로 정렬하는 것입니다. IP 주소에만 작동하는 정렬 명령을 찾았습니다.

sort -rn -t . -k1,1 -k2,2 -k 3,3 -k4,4

그러나 위에서 언급했듯이 이를 첫 번째 열(반복 횟수)과 결합하여 다음과 같은 예상 결과를 얻는 방법을 모르겠습니다.

  5  72.204.55.250
  2  208.115.113.91
  2  178.137.94.166
  2  141.8.143.179
  2  96.41.51.202

어떻게 해야 하나요? 도움을 주셔서 미리 감사드립니다.

답변1

정렬이 가능하다면안정적인 정렬-s예를 들어 GNU sort 와 함께 또는 옵션을 사용하면 --stable동률이 있는 경우 정렬 키와 관련되지 않은 필드가 있는 행은 해당 필드별로 정렬되지 않지만 동일한 상대 위치에 유지됩니다.

$ sort -n -t. -k1,1 -k2,2 -k3,3 -k4,4 | uniq -c | sort -n -r -s
  5 72.204.55.250
  2 96.41.51.202
  2 141.8.143.179
  2 178.137.94.166
  2 208.115.113.91

답변2

때를할 수 있는Postgres 데이터베이스에 액세스할 수 있는 경우 명령줄 도구를 사용하여 이 작업을 수행할 수 있는 빠른 방법은 다음과 같습니다(재미로).

[vagrant@localhost ~]$ cat ips.txt 
72.204.55.250
72.204.55.250
72.204.55.250
72.204.55.250
72.204.55.250
96.41.51.202
208.115.113.91
178.137.94.166
178.137.94.166
208.115.113.91
96.41.51.202
141.8.143.179
141.8.143.179
[vagrant@localhost ~]$ psql
Expanded display is used automatically.
psql (9.3.15)
Type "help" for help.

vagrant=# create temp table ips (ipaddress inet);
CREATE TABLE
vagrant=# \copy ips from ips.txt
vagrant=# select count(*), ipaddress
vagrant-# from ips
vagrant-# group by ipaddress
vagrant-# order by count desc, ipaddress
vagrant-# ;
 count |   ipaddress    
-------+----------------
     5 | 72.204.55.250
     2 | 96.41.51.202
     2 | 141.8.143.179
     2 | 178.137.94.166
     2 | 208.115.113.91
(5 rows)

vagrant=# \q
[vagrant@localhost ~]$ 

실제로 이러한 작업을 수행하기 위해 Vagrant 시스템에 샌드박스 Postgres 인스턴스가 있습니다. 편리한.

알파벳순이 아닌 IP 주소순으로 올바르게 정렬하도록 주의하세요. 이는 IP 주소에 Postgres 데이터 유형 "inet"를 사용하기 때문입니다.

답변3

나는 이것이 여기에 게시된 다른 솔루션보다 훨씬 간단할 것이라고 생각합니다.

IP 주소는 다음과 같습니다.

72.204.55.250
72.204.55.250
96.41.51.202
208.115.113.91
178.137.94.166

다음을 수행할 수 있습니다. $ sort file | uniq -c | sort -n -r -k1,1

설명하다:

  1. 먼저 파일을 정렬합니다(이 uniq가 없으면 작동하지 않습니다).
  2. 그런 다음 각 IP가 목록에 나타나는 횟수를 계산합니다.
  3. 그런 다음 다시 개수별로 정렬합니다.
    • -n- 값을 숫자로 취급
    • -r- 가장 높은 수부터 시작하여 순서를 반대로 합니다.
    • -k1- 첫 번째 열을 기준으로 정렬(더 많은 옵션을 사용할 수 있지만 이것이 우리에게 필요한 것입니다)

관련 정보