문자 "a"가 포함된 파일의 단어 수를 확인하는 Bash 명령
답변1
다음 테스트 파일이 있다고 가정해 보겠습니다.
$ cat file
the cat in the hat
the quick brown dog
jack splat
grep
GNU 확장 구현을 채택 함으로써 -o
다음을 포함하는 모든 단어를 검색할 수 있습니다 a
.
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file
cat
hat
jack
splat
우리는 다음 단어들을 셀 수 있습니다:
$ grep -wo '[[:alnum:]]*a[[:alnum:]]*' file | wc -l
4
답변2
POSIX적으로:
<file tr -s '[:space:]' '[\n*]' | grep -c a
여기,성격공백이 아닌 문자의 시퀀스입니다.
답변3
이것이 Perl 방식입니다:
perl -0lnE 'say scalar grep(/a/,split(/\s/,$_));' file
또 다른 방법이 있습니다 awk
:
awk '{for(i=1;i<=NF;i++){if($(i)~/a/){k++}}}END{print k}' file
답변4
awk 'BEGIN{RS="[[:space:][:punct:]]"; c=0}
index($0,"a"){c++}
END{print c}'
awk
여러 문자를 지원하는 버전을 사용하세요오른쪽에코코드에스구분 기호( )는 GNU awk처럼 각 레코드가 한 단어를 읽 RS
도록 할 수 있습니다 .awk
이 기록에는index(in, string)
기능 검색in
처음으로string
, 그리고 반환1을 기본으로문자 위치를 찾으세요. 찾을 수 없으면 index()
반환0. 따라서 반환 값은 부울 조건 테스트(0 = false, 0이 아님 = true)로 볼 수 있습니다. 이는 정규식 검색이 아닙니다.
일치하는 항목이 발견되면 변수가 1( ) c
씩 증가합니다 .c++
c=0
블록은 절대 증가하지 않기 BEGIN{}
때문에 필요합니다 . 이로 인해 대신 블록이 사용 됩니다 . 이를 처리하는 또 다른 방법은 ( 블록에서) 입니다.c
c
null
0
print 0+c
END{}