각 줄에 하나씩 IP 주소를 포함하는 파일이 있다고 가정합니다.
10.0.10.1
10.0.10.1
10.0.10.3
10.0.10.2
10.0.10.1
각 IP 주소에 대해 파일에 나타나는 횟수를 세는 셸 스크립트가 필요합니다. 이전 입력의 경우 다음 출력이 필요합니다.
10.0.10.1 3
10.0.10.2 1
10.0.10.3 1
이를 수행하는 한 가지 방법은 다음과 같습니다.
cat ip_addresses |uniq |while read ip
do
echo -n $ip" "
grep -c $ip ip_addresses
done
그러나 실제로 효율적이지는 않습니다.
bash를 사용 하여이 문제를 어떻게보다 효율적으로 해결할 수 있습니까?
(추가해야 할 사항 : perl 또는 awk에서 해결할 수 있다는 것을 알고 있습니다. 해당 언어가 아닌 bash의 더 나은 솔루션에 관심이 있습니다.)
추가 정보:
소스 파일이 5GB이고 알고리즘을 실행하는 시스템에 4GB가 있다고 가정하십시오. 따라서 정렬은 효율적인 솔루션이 아니며 파일을 두 번 이상 읽지 않습니다.
해시 테이블과 같은 솔루션이 마음에 들었습니다. 해당 솔루션을 개선 할 수있는 사람이 있습니까?
추가 정보 # 2 :
어떤 사람들은 왜 펄에서 더 쉬울 때 bash에서 왜 귀찮게 할 것인지 물었습니다. 그 이유는 기계 에서이 펄을 사용해야했기 때문에 사용할 수 없었기 때문입니다. 내가 익숙한 도구가없는 맞춤형 리눅스 시스템이었다. 그리고 나는 그것이 흥미로운 문제라고 생각합니다.
따라서 질문을 비난하지 말고 마음에 들지 않으면 무시하십시오. :-)