Mám textový soubor obsahující tweety a musím počítat, kolikrát je slovo uvedeno v tweetu Například soubor obsahuje:
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?
A řekněme, že chci spočítat, kolikrát je v souboru uvedeno slovo iPhone. Takže tady je to, co jsem vyzkoušel.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
to určitě funguje, ale jsem zmatený ohledně příkazu „wc“ v unixu. Jaký je rozdíl pokud zkusím něco jako:
cut -f 1 Tweet_Data | grep -c "iPhone"
kde se místo toho použije -c? Oba přinášejí různé výsledky ve velkém souboru plném tweetů a jsem zmatený jak to funguje. Která metoda je správný způsob počítání výskytu?
Komentáře
Odpověď
Vzhledem k takovému požadavku bych použijte GNU grep (pro -o
možnost ), poté jej projděte wc
k výpočtu celkového počtu výskytů:
$ grep -o -i iphone Tweet_Data | wc -l 3
Prostý grep -c
v datech se bude počítat počet řádků , které odpovídají, nikoli celkový počet slov , která se shodují. Použitím možnosti -o
řeknete grepu, aby vyprodukoval každou shodu na svém vlastním řádku, bez ohledu na to, kolikrát byla shoda nalezena v původním řádku.
wc -l
říká nástroji wc
, aby spočítal počet řádků. Poté, co grep umístí každou shodu do vlastního řádku, jedná se o celkový počet výskytů slova na vstupu.
Pokud GNU grep není k dispozici (nebo požadovaný), můžete transformovat zadejte pomocí tr
tak, aby každé slovo bylo na vlastním řádku, a poté pomocí grep -c
spočítat:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Odpověď
Nejjednodušší metoda je,
grep -wc "your_text" FileName
pro vás to bude,
grep -wc "iPhone" Tweet_Data
komentáře
- velmi čistá odpověď, ale pokud se shodují se slovem jako ' cool ', budete odpovídat pouze cool a NE ccooll, takže mějte na paměti, že mezery kolem slova jsou důležité.
- Výsledek bude nesprávný, pokud se slovo vyskytne vícekrát v řádku.
cut -f1
je řez podle karty, které zde ' moc nedělají. Jste si jisti, žewc -l
vám skutečně dává správný počet? Zde by se zobrazily 2, ale počítám 3 instance " iPhone ".