파일의 총 단어 수를 계산하는 방법은 무엇입니까?

파일의 총 단어 수를 계산하는 방법은 무엇입니까?

파일의 모든 단어 수를 계산하는 명령을 찾고 있습니다. 예를 들어, 파일이 다음과 같다면,

today is a 
good day

5그러면 거기에 단어 가 있기 때문에 인쇄되어야 합니다 5.

답변1

이 명령 wc은 라고도 합니다. 단어 수는 다음과 같습니다.

$ wc -w <file>

$ cat sample.txt
today is a 
good day


$ wc -w sample.txt
5 sample.txt


# just the number (thanks to Stephane Chazelas' comment)
$ wc -w < sample.txt
5

답변2

나는 단지 숫자 때문에 이것을 생각해 냈습니다.

wc -w [file] | cut -d' ' -f1

5

나도 이 wc -w < [file]방법 좋아함

마지막으로 변수에 단어 수만 저장하려면 다음을 사용할 수 있습니다.

myVar=($(wc -w /path/to/file))

이를 통해 파일 이름을 정상적으로 건너뛸 수 있습니다.

답변3

더 나은 해결책은 Perl을 사용하는 것입니다.

perl -nle '$word += scalar(split(/\s+/, $_)); END{print $word}' filename

@bernhard

coreutils에서 명령의 소스 코드를 확인할 수 있습니다 wc. 제 컴퓨터에서 테스트했는데 파일은 subst.cbash 4.2 소스 코드에 있습니다.

time wc -w subst.c

real    0m0.025s
user    0m0.016s
sys     0m0.000s

그리고

time perl -nle '$word += scalar(split(" ", $_)); END{print $word}' subst.c

real    0m0.021s
user    0m0.016s
sys     0m0.004s

파일이 클수록 Perl이 wc.

답변4

프로그램 wc은 "단어"를 계산하지만 이는 많은 사람들이 파일을 검사할 때 보는 "단어"가 아닙니다. 예를 들어, vi프로그램은 "단어"에 대한 다양한 측정값을 사용하여 문자 범주에 따라 구분하고 wc단순히 숫자를 세는 것입니다.공백으로 구분. 두 측정값은 상당히 다를 수 있습니다. 다음 예를 고려하십시오.

first,second

vi보다성격(첫 번째그리고두번째및 이를 구분하는 쉼표)도 wc참조하세요 .하나(이 줄에는 공백이 없습니다). 단어 수를 세는 방법은 여러 가지가 있지만 일부는 다른 것보다 덜 유용합니다.

Perl은 vi 스타일 단어에 대한 카운터를 작성하는 데 더 적합하지만 다음은 sed, tr및 를 사용하는 간단한 예 wc입니다(리터럴 캐리지 리턴을 사용하면 적당히 이식 가능 ^M).

#!/bin/sh
in_words="[[:alnum:]_]"
in_punct="[][{}\\|:\"';<>,./?\`~!@#$%^&*()+=-]"
sed     -e "s/\($in_words\)\($in_punct\)/\1^M\2/g" \
        -e "s/\($in_punct\)\($in_words\)/\1^M\2/g" \
        -e "s/[[:space:]]/^M/g" \
        "$@" |
tr '\r' '\n' |
sed     -e '/^$/d' |
wc      -l

개수 비교:

  • 스크립트 자체를 실행하면 76개의 단어가 나왔습니다.
  • @cuonglm의 Perl 예제는 31을 제공합니다.
  • 사용하면 wc28이 됩니다.

참고로,POSIX vi설명하다:

POSIX 로케일에서 vi는 다섯 가지 유형의 단어를 인식해야 합니다.

  1. 다음 구분 기호로 구분된 문자, 숫자, 밑줄의 최대 순서:

    • 문자, 숫자, 밑줄 이외의 문자

    • 줄의 시작이나 끝

    • 버퍼의 시작 또는 끝 편집

  2. 문자, 숫자, 밑줄 또는 문자를 제외한 가장 큰 문자 시퀀스이며 다음 구분 기호로 구분됩니다.

    • 문자, 숫자, 밑줄
    • <blank>수치
    • 줄의 시작이나 끝
    • 버퍼의 시작 또는 끝 편집
  3. 하나 이상의 연속된 빈 줄

  4. 버퍼의 첫 번째 문자 편집

  5. 마지막 비<newline>편집 버퍼에서

관련 정보