리눅스
리눅스 IP 주소 정렬
snoopybox
2019. 9. 16. 17:07
리눅스에서 정렬할때 sort 명령어를 자주 사용한다. 그런데 IPv4 주소의 경우 sort로 그냥 정렬하면 원하는 결과가 나오지 않는다. 예를 들어 아래와 같은 IP 주소가 있다고 할 때
20.2.2.2
3.4.3.3
100.1.1.1
3.30.3.3
우리가 원하는 결과는 아래와 같다.
3.4.3.3
3.30.3.3
20.2.2.2
100.1.1.1
하지만 그냥 sort를 하면 아래와 같이 나오고
100.1.1.1
20.2.2.2
3.30.3.3
3.4.3.3
sort -n 옵션을 주어도 아래와 같이 나온다.
3.30.3.3
3.4.3.3
20.2.2.2
100.1.1.1
3.30.3.3보다 3.4.3.3이 먼저 나와야 하는데 -n은 그것까지 고려하지 못한다.
해결책은 약간의 트릭이기는 하지만 -V 옵션을 사용하는 것이다. -V는 버전넘버로 정렬인데 IPv4 주소가 딱 거기에 걸리는 형식이다. sort -V 옵션을 사용하면 아래와 같이 원하는 결과가 나온다.
3.4.3.3
3.30.3.3
20.2.2.2
100.1.1.1
참고로 MySQL의 경우 ORDER BY INET_ATON(column)을 사용하면 되고, Python의 경우 socket.inet_aton을 사용하면 된다.