Ho un file di testo contenente i tweet e mi viene richiesto di contare il numero di volte in cui una parola viene menzionata nel tweet Ad esempio, il file contiene:
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?
E diciamo che voglio contare quante volte la parola iPhone è menzionata nel file. Quindi ecco quello che ho provato.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
certamente funziona ma sono confuso riguardo al comando “wc” in unix. Qual è la differenza se provo qualcosa del tipo:
cut -f 1 Tweet_Data | grep -c "iPhone"
dove viene utilizzato -c? Entrambi producono risultati diversi in un file di grandi dimensioni pieno di tweet e io “sono confuso su come funziona. Qual è il metodo corretto per contare loccorrenza?
Commenti
Risposta
Dato tale requisito, vorrei usa un grep GNU (per -o
opzione ), quindi passalo wc
per contare il numero totale di occorrenze:
$ grep -o -i iphone Tweet_Data | wc -l 3
Semplice grep -c
nei dati conterà il numero di righe che corrispondono, non il numero totale di parole che corrispondono. Lutilizzo dellopzione -o
dice a grep di visualizzare ogni corrispondenza sulla propria riga, indipendentemente da quante volte la corrispondenza è stata trovata nella riga originale.
wc -l
dice allutilità wc
di contare il numero di righe. Dopo che grep ha inserito ogni corrispondenza nella propria riga, questo è il numero totale di occorrenze della parola nellinput.
Se GNU grep non è disponibile (o desiderato), è possibile trasformare il inserisci tr
in modo che ogni parola si trovi su una riga separata, quindi utilizza grep -c
per contare:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Risposta
Il metodo più semplice è
grep -wc "your_text" FileName
per te lo sarà,
grep -wc "iPhone" Tweet_Data
Commenti
- Risposta molto chiara se tu corrispondono a una parola come ' cool ' farai solo corrispondere cool e NON ccooll, quindi tieni presente che gli spazi intorno alla parola sono importanti.
- Il risultato non sarà corretto se la parola ricorre più di una volta in una riga.
cut -f1
viene tagliato in base a tabs, che ' non fa molto qui. Sei sicuro chewc -l
ti dia davvero il conteggio corretto? Ne mostrerebbe 2 qui, ma conto 3 istanze di " iPhone ".