Menghitung kemunculan kata dalam file teks

31

Saya memiliki file teks yang berisi tweet dan saya diharuskan menghitung berapa kali sebuah kata disebutkan dalam tweet. Misalnya, file tersebut berisi:

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?

Dan katakanlah saya ingin menghitung berapa kali kata iPhone disebutkan dalam file. Jadi, inilah yang saya coba.

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

itu pasti berfungsi tetapi saya bingung tentang perintah 'wc' di unix. Apa bedanya jika saya mencoba sesuatu seperti:

cut -f 1 Tweet_Data | grep -c "iPhone"

di mana -c digunakan sebagai gantinya? Kedua hasil ini berbeda dalam file besar penuh tweet dan saya bingung tentang cara kerjanya. Metode manakah yang merupakan cara yang benar untuk menghitung kejadian?

Maks
sumber
cut -f1memotong berdasarkan tab, yang tidak banyak membantu di sini. Apakah Anda yakin itu wc -lbenar-benar memberi Anda hitungan yang benar? Ini akan menunjukkan 2 di sini, tapi saya menghitung 3 contoh "iPhone".
Jeff Schaller
Teknik lain: unix.stackexchange.com/q/39039/117549
Jeff Schaller
Juga serupa: unix.stackexchange.com/q/60727/117549
Jeff Schaller

Jawaban:

54

Dengan persyaratan seperti itu, saya akan menggunakan GNU grep (untuk -oopsi ), lalu meneruskannya wcuntuk menghitung jumlah total kejadian:

$ grep -o -i iphone Tweet_Data | wc -l
3

grep -cData polos akan menghitung jumlah baris yang cocok, bukan jumlah total kata yang cocok. Menggunakan -oopsi memberitahu grep untuk menampilkan setiap kecocokan pada baris on-nya, tidak peduli berapa kali kecocokan pada baris tersebut.

wc -lmemberitahu wcutilitas untuk menghitung jumlah baris. Setelah grep menempatkan setiap kecocokan pada barisnya masing-masing, ini adalah jumlah total kemunculan kata dalam input.


Jika GNU grep tidak tersedia (atau diinginkan), Anda bisa mengubah input dengan trsehingga setiap kata pada barisnya sendiri, kemudian gunakan grep -cuntuk menghitung:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
Jeff Schaller
sumber
1

Metode termudah adalah,

grep -wc "your_text" FileName

untukmu,

grep -wc "iPhone" Tweet_Data
Penonton Diam
sumber
Namun jawaban yang sangat bersih jika Anda mencocokkan kata seperti 'keren' Anda hanya akan cocok dengan keren dan BUKAN ccooll jadi waspadalah bahwa ada spasi di sekitar kata itu.
jasonleonhard
1
Hasilnya akan salah ketika kata tersebut muncul lebih dari satu kali dalam satu baris.
hek2mgl