Apakah ada cara di bawah linux / terminal untuk menghitung, berapa kali karakter muncul dalam file teks biasa?
Apakah ada cara di bawah linux / terminal untuk menghitung, berapa kali karakter muncul dalam file teks biasa?
Jawaban:
Bagaimana dengan ini:
fgrep -o f <file> | wc -l
Catatan: Selain jauh lebih mudah diingat / digandakan dan dikustomisasi, ini sekitar tiga kali (maaf, edit! Gagal tes pertama) lebih cepat daripada jawaban Vereb.
\ratau \nkarakter; yang tr -cd fjawabannya tidak bekerja untuk itu.
a, bdan c, gunakan egrep: egrep -o 'a|b|c' <file> | wc -l.
wc -cseperti pada trjawaban: karena grepoutput baris demi baris, wcakan menghitung end-of-line sebagai karakter (karenanya menggandakan jumlah karakter).
\r, tetapi untuk menghitung \nmengapa tidak hanya digunakan wc -l?
bahkan lebih cepat:
tr -cd f < file | wc -c
Waktu untuk perintah ini dengan file dengan 4,9 MB dan 1100000 kejadian karakter yang dicari:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Waktu untuk Vereb jawaban dengan echo, cat, trdan bcuntuk file yang sama:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Waktu untuk Rob Hruska menjawab tr, seddan wcuntuk file yang sama:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Waktu untuk jawaban Jefromi dengan fgrepdan wcuntuk file yang sama:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a, bdan c: tr -cd abc < file | wc -l.
tr -cd abc < file | wc -csebagai gantinya
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
di mana A adalah karakter
Waktu untuk perintah ini dengan file dengan 4,9 MB dan 1100000 kejadian karakter yang dicari:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
cat, memberikan nama file sebagai argumen untuk wcdan tr.
stdin, tapi itu bisa disalurkan daripada cated:tr -d 'A' < <file> | wc ...
Jika yang perlu Anda lakukan adalah menghitung jumlah baris yang mengandung karakter Anda, ini akan berhasil:
grep -c 'f' myfile
Namun, itu menghitung beberapa kemunculan 'f' pada baris yang sama dengan satu pertandingan.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Mengganti dua kemunculan "A" dengan karakter Anda, dan "file" dengan file input Anda.
tr -d '\n' < file: menghapus baris barused 's/A/A\n/g: menambahkan baris baru setelah setiap kemunculan "A"wc -l: menghitung jumlah garisContoh:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9