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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *