Misalkan Anda memiliki file yang berisi alamat IP, satu alamat di setiap baris:
10.0.10.1
10.0.10.1
10.0.10.3
10.0.10.2
10.0.10.1
Anda memerlukan skrip shell yang menghitung untuk setiap alamat IP berapa kali muncul dalam file. Untuk input sebelumnya, Anda memerlukan output berikut:
10.0.10.1 3
10.0.10.2 1
10.0.10.3 1
Salah satu cara untuk melakukan ini adalah:
cat ip_addresses |uniq |while read ip
do
echo -n $ip" "
grep -c $ip ip_addresses
done
Namun itu jauh dari efisien.
Bagaimana Anda memecahkan masalah ini secara lebih efisien menggunakan bash?
(Satu hal untuk ditambahkan: Saya tahu ini bisa diselesaikan dari perl atau awk, saya tertarik pada solusi yang lebih baik dalam bash, bukan dalam bahasa itu.)
INFORMASI TAMBAHAN:
Misalkan file sumber 5GB dan mesin yang menjalankan algoritma 4GB. Jadi sort bukanlah solusi yang efisien, juga tidak membaca file lebih dari sekali.
Saya menyukai solusi seperti hashtable - siapa pun dapat memberikan peningkatan pada solusi itu?
INFO TAMBAHAN # 2:
Beberapa orang bertanya mengapa saya repot-repot melakukannya di bash ketika itu jauh lebih mudah di misalnya perl. Alasannya adalah bahwa pada mesin saya harus melakukan perl ini tidak tersedia untuk saya. Itu adalah mesin linux yang dibuat khusus tanpa sebagian besar alat yang biasa saya gunakan. Dan saya pikir itu masalah yang menarik.
Jadi tolong, jangan salahkan pertanyaannya, abaikan saja jika Anda tidak menyukainya. :-)