2017-10-18 1 views
0

터미널을 사용하여 단어 (stopwords.txt라는 목록에서)를 제외하고 문구 텍스트 "text.txt"의 단어 - 빈도를 계산하려고합니다.단어 egrep을 사용하는 정지 단어가없는 빈도

cat text.txt | tr -sc 'A-Za-z' '\n' | tr 'A-Z' 'a-z' | egrep -vwFf stopwords.txt | sort | uniq -c 

왜이 기능이 작동하지 않고 올바른 스크립트가 있어야합니까?

참고 : 출력을 저 빈도에서 높음으로 정렬해야합니다.

당신은 하나 개의 프로세스보다는 덜 효율적인 파이프 이렇게 awk 사용을 고려할 수
+2

샘플 입력 파일 출력 – 123

+0

내 컴퓨터에서'egrep -vwFf'는'grep : conflicting matchers specified'라는 오류를 반환합니다. 간단히'F'flag를 제거하면이 문제를 해결할 수 있습니다. – Aserre

+0

@Aserre 좋은 포인트입니다 –

답변

0

:

$ awk 'BEGIN{RS="[^[:alpha:]]"} 
    /^$/{next} 
    {word=tolower($1)} 
    FNR==NR {stop[word]; next} 
    word in stop {next} 
    {wc[word]++} 
    END{ for (e in wc) printf "%4d\t%s\n", wc[e], e } 
    ' stopwords words 

(gawk 만이 경우 ...)

POSIX의 AWK :

$ awk 'BEGIN{FS="[^[:alpha:]]"} 
    {for (i=1; i<=NF; i++){ 
     word=tolower($i) 
     if (FNR==NR) 
      stop[word] 
     else if (word in stop || $i~/^$/) 
      continue 
     else 
      wc[word]++ 
     } 
    } 
    END{ for (e in wc) printf "%4d\t%s\n", wc[e], e } 
    ' stopwords words 

그러면 '파이프'는 | sort -n

을 사용하여 sort을 호출 할 수 있습니다.
+0

감사합니다! 그것은 잡음 해결책 일 것입니다; 하지만 파이프로하고 싶다. –