Jeg har en tekstfil som inneholder tweets, og jeg må telle antall ganger et ord er nevnt i tweeten For eksempel inneholder filen:
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?
Og la oss si at jeg vil telle hvor mange ganger ordet iPhone er nevnt i filen. Så her har jeg prøvd.
cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l
det fungerer absolutt, men jeg er forvirret over kommandoen «wc» i unix. Hva er forskjellen hvis jeg prøver noe sånt som:
cut -f 1 Tweet_Data | grep -c "iPhone"
hvor -c brukes i stedet? Begge disse gir forskjellige resultater i en stor fil full av tweets og jeg er forvirret på hvordan det fungerer. Hvilken metode er den riktige måten å telle forekomsten på?
Kommentarer
Svar
Gitt et slikt krav, vil jeg bruk en GNU-grep (for -o
-alternativet ), deretter send den gjennom wc
for å telle det totale antallet forekomster:
$ grep -o -i iphone Tweet_Data | wc -l 3
Vanlig grep -c
på dataene teller antall linjer som samsvarer, ikke det totale antallet ord som samsvarer. Ved å bruke alternativet -o
skal grep sende ut hvert treff på sin egen linje, uansett hvor mange ganger treffet ble funnet i den opprinnelige linjen. = «bf9173b9f5″>
forteller wc
verktøyet for å telle antall linjer. Etter at grep setter hver kamp i sin egen linje, er dette det totale antallet forekomster av ordet i inngangen.
Hvis GNU grep ikke er tilgjengelig (eller ønsket), kan du transformere skriv inn med tr
slik at hvert ord er på sin egen linje, bruk deretter grep -c
for å telle:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Svar
Enkleste metode er,
grep -wc "your_text" FileName
for deg vil det være,
grep -wc "iPhone" Tweet_Data
Kommentarer
- Veldig rent svar, men hvis du samsvarer med et ord som ' kult ' du vil bare matche kult og IKKE ccooll, så vær oppmerksom på at mellomrom rundt ordet betyr.
- Resultatet blir feil når ordet forekommer mer enn en gang i en linje.
cut -f1
er å kutte basert på faner, som ikke ' ikke gjør mye her. Er du sikker på atwc -l
virkelig gir deg riktig telling? Det vil vise 2 her, men jeg teller 3 forekomster av " iPhone ".