단어의 빈도를 계산하는 방법 >20

단어의 빈도를 계산하는 방법 >20

AWK만 사용하면 단어가 20자를 초과하는 경우에만 단어 발생 횟수를 계산해야 합니다. 단어 빈도를 계산하는 방법을 찾았지만 이 매개변수를 설정하는 데 몇 가지 문제가 있습니다.

다음으로, 정의하고 싶은 동의어에서 이 단어들을 분리하되 한 단어는 건너뛰고 싶습니다.

내 말은, "hello"가 30번 나타나면 ,, ...가 여전히 "hello" 인 대신 , 등을 "hi"로 2nd바꾸고 4th싶다는 것입니다 .6th1st3rd

이것이 내가 한 일입니다:

BEGIN { FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         words[word]++
     }
 }
 END {
     for (w in words)
          printf("%3d %s\n", words[w], w)
 } 

답변1

네 말 뜻은:

BEGIN { flag=0; FS="[^a-zA-Z]+" } {
     for (i=1; i<=NF; i++) {
         word = tolower($i)
         if ($0 ~ /hello/ ) {
             if (flag) {
                 sub ("hello", "hi", word );
             }
            flag= !flag
         }
         words[word]++
     }
 }
END {
        for (w in words)
           printf("%3d %s\n", words[w], w)
    }

위의 기능은 프로그램이 초기화될 때 a를 설정하는 것입니다 flag.0awk

파일 반복에서 hello입력 문자열을 확인한 다음 발견되면 를 확인 hello하고 로 변경하지 않습니다 .flagflag0hellohi

flag그런 다음 (0 => 1, 1 => 0)의 값을 전환합니다.

다음 hello에 발생하면 flag값이 이고 1to가 대체됩니다.hellohi

관련 정보