Bagaimana Anda menghitung setiap kemunculan istilah di semua file di direktori saat ini? - dan subdirektori (?)
Saya sudah membaca bahwa untuk melakukan ini Anda akan menggunakan grep
; apa perintah tepatnya?
Juga, apakah mungkin untuk yang di atas dengan beberapa perintah lain?
command-line
files
directory
grep
TellMeWhy
sumber
sumber
PCREs
tidak boleh digunakan karena mereka eksperimental-F
mungkin akan lebih cepat.-F
bukan-P
. Terima kasih atas saran bagus, memperbarui penggunaan-F
, yang memang lebih cocok di sini.grep -Rc [term] *
akan melakukan itu. Tanda itu-R
berarti Anda ingin secara rekursif mencari direktori saat ini dan semua subdirektori. Ini*
adalah arti pemilih file: semua file. The-c
flag membuatgrep
keluaran hanya jumlah kejadian. Namun, jika kata itu muncul beberapa kali dalam satu baris, itu hanya dihitung sekali.Dari
man grep
:Jika Anda tidak memiliki tautan simbolis di direktori Anda, tidak ada perbedaan.
sumber
-c
bendera kegrep
. Kemudian grep menghitung dengan sendirinya dan Anda tidak perluwc
--
sebelum*
*
akan diperluas ke non-dotfile, jadi Anda melewatkan semua itu. Lebih masuk akal untuk menggunakan "." karena Anda akan memproses argumen secara rekursif - dan itu akan mendapatkan file dot. Masalah yang lebih besar di sini adalah bahwa ini akan bisa jumlah baris, bukan jumlah kemunculan kata. Jika istilah tersebut muncul beberapa kali dalam satu baris, itu hanya akan dihitung sekali oleh "grep -c"Dalam skrip python kecil:
count_string.py
.Jalankan dari direktori dengan perintah:
Catatan
Penjelasan:
sumber
root
danf
?root
adalah path ke file termasuk "di atas" direktori saat ini,f
adalah file. Atau,os.path.join()
bisa digunakan, tetapi lebih verbose.n = n + open(f).read().count(s)
?Sebagai varian jawaban bagus @ kos, jika Anda tertarik merinci penghitungan, Anda dapat menggunakan
-c
sakelar grep untuk menghitung kemunculan:sumber