Підрахунок подій слова у текстовому файлі


31

У мене є текстовий файл, що містить твіти, і мені потрібно порахувати кількість разів, яке слово згадується в твітті. Наприклад, файл містить:

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?

Скажімо, я хочу порахувати, скільки разів у файлі згадується слово iPhone. Отже ось що я спробував.

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

це, безумовно, працює, але я плутаю команду 'wc' в unix. Яка різниця, якщо я спробую щось на кшталт:

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

де натомість використовується -c? Обидва ці результати дають різні результати у великому файлі, повному твітів, і я розгублений у тому, як це працює. Який метод є правильним способом підрахунку події?


cut -f1вирізання базується на вкладках, що тут не дуже багато. Ви впевнені, що wc -lце справді дає вам правильний підрахунок? Тут було б показано 2, але я рахую 3 екземпляри "iPhone".
Джефф Шаллер

Ще одна техніка: unix.stackexchange.com/q/39039/117549
Jeff Schaller

Відповіді:


54

Враховуючи таку вимогу, я б використовував GNU grep (для -oопції ), а потім передав би його через wcпідрахунок загальної кількості подій:

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

Звичайні grep -cдані будуть рахувати кількість рядків, які відповідають, а не загальну кількість слів, які відповідають. За допомогою -oпараметра вказується grep для виведення кожного матчу на його лінію, незалежно від того, скільки разів збіг знаходиться в рядку.

wc -lвказує wcутиліті підрахувати кількість рядків. Після того, як grep кладе кожну відповідність у свій рядок, це загальна кількість зустрічань слова у введеному слові.


Якщо GNU grep недоступний (або бажаний), ви можете перетворити введення trтаким чином, щоб кожне слово було у своєму рядку, а потім використовуйте grep -cдля підрахунку:

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

1

Найпростіший метод -

grep -wc "your_text" FileName

для вас це буде,

grep -wc "iPhone" Tweet_Data

Дуже чиста відповідь, але якщо ви співпадаєте з таким словом, як "cool", ви будете відповідати лише cool, а НЕ ccooll, тому знайте, що пробіли навколо слова мають значення.
jasonleonhard

1
Результат буде неправильним, коли слово трапляється не один раз у рядку.
hek2mgl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.