Jawaban:
Kirimkan melalui sort
(untuk menyatukan barang-barang yang berdekatan) lalu uniq -c
berikan hitungan, yaitu:
sort filename | uniq -c
dan untuk mendapatkan daftar itu dalam urutan yang diurutkan (berdasarkan frekuensi) Anda bisa
sort filename | uniq -c | sort -nr
uniq -c file
dan jika file belum diurutkan:
sort file | uniq -c
Bisakah Anda hidup dengan daftar urutan abjad:
echo "red apple
> green apple
> green apple
> orange
> orange
> orange
> " | sort -u
?
green apple
orange
red apple
atau
sort -u FILE
-u singkatan dari unique, dan keunikan hanya bisa dicapai melalui sortasi.
Solusi yang mempertahankan pesanan:
echo "red apple
green apple
green apple
orange
orange
orange
" | { old=""; while read line ; do if [[ $line != $old ]]; then echo $line; old=$line; fi ; done }
red apple
green apple
orange
dan, dengan file
cat file | {
old=""
while read line
do
if [[ $line != $old ]]
then
echo $line
old=$line
fi
done }
Dua yang terakhir hanya menghapus duplikat, yang segera mengikuti - yang sesuai dengan contoh Anda.
echo "red apple
green apple
lila banana
green apple
" ...
Akan mencetak dua apel, dibelah dengan pisang.
Untuk hanya menghitung:
$> egrep -o '\w+' fruits.txt | sort | uniq -c
3 apple
2 green
1 oragen
2 orange
1 red
Untuk mendapatkan hitungan yang diurutkan:
$> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1
1 oragen
1 red
2 green
2 orange
3 apple
EDIT
Aha, ini BUKAN di sepanjang batas kata, saya buruk. Inilah perintah yang digunakan untuk baris penuh:
$> cat fruits.txt | sort | uniq -c | sort -nk1
1 oragen
1 red apple
2 green apple
2 orange
Berikut adalah script python sederhana menggunakan tipe Counter . Manfaatnya adalah ini tidak memerlukan pengurutan file, pada dasarnya menggunakan nol memori:
import collections
import fileinput
import json
print(json.dumps(collections.Counter(map(str.strip, fileinput.input())), indent=2))
Keluaran:
$ cat filename | python3 script.py
{
"red apple": 1,
"green apple": 2,
"orange": 3
}
atau Anda dapat menggunakan satu baris sederhana:
$ cat filename | python3 -c 'print(__import__("json").dumps(__import__("collections").Counter(map(str.strip, __import__("fileinput").input())), indent=2))'
-d
catatan kecil itu .