Van egy szöveges fájlom, amely tweeteket tartalmaz, és nekem meg kell számolnom, hogy egy szó hányszor szerepel a tweetben . Például a fájl a következőket tartalmazza:
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?
És mondjuk azt, hogy meg akarom számolni, hányszor szerepel az iPhone szó a fájlban. Tehát itt van, amit kipróbáltam.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
ez biztosan működik, de a “wc” paranccsal unix-ben zavarba jöttem. Mi a különbség ha valami ilyesmivel próbálkozom:
cut -f 1 Tweet_Data | grep -c "iPhone"
ahol helyette a -c elemet használják? Mindkettő különböző eredményeket ad egy nagy, tweetekkel teli fájlban, és zavart vagyok hogyan működik. Melyik módszer a helyes módja az előfordulás számlálásának?
Megjegyzések
Válasz
Ilyen követelmény miatt szeretném használjon egy GNU grep-et (a -o
opcióhoz ), majd adja át wc
az előfordulások teljes számának megszámolásához:
$ grep -o -i iphone Tweet_Data | wc -l 3
Sima grep -c
az adatokon az egyező sorok száma számít, nem pedig az egyező szavak száma. Az -o
opció használatával a grep megmondja, hogy minden mérkőzést a saját sorára bocsásson ki, függetlenül attól, hogy az eredeti sorban hányszor találták meg az egyezést.
wc -l
utasítja a wc
segédprogramot, hogy számolja meg a sorok számát. Miután a grep minden mérkőzést a saját sorába rakta, ez az összes szó előfordulásának száma a bemenetben.
Ha a GNU grep nem érhető el (vagy kívánatos), akkor átalakíthatja a írja be a tr
karakterláncot úgy, hogy minden szó a saját sorára kerüljön, majd a grep -c
paranccsal számolja:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Válasz
A legkönnyebb módszer,
grep -wc "your_text" FileName
neked ez lesz,
grep -wc "iPhone" Tweet_Data
megjegyzések
- nagyon tiszta válasz, ha mégis megfelelnek egy olyan szónak, mint ' cool ', akkor csak a hűvös és a NEM megfelelő, tehát ne feledje, hogy a szó körüli szóközök fontosak. li>
- Az eredmény hibás lesz, ha a szó többször szerepel egy sorban.
cut -f1
vágás alapján fülek, amelyek nem ' t csinálnak itt sokat. Biztos benne, hogy awc -l
valóban a helyes számot adja meg? Itt 2 jelenne meg, de az " iPhone " 3 példányát számolom.