나는 여러 세트로 tr을 사용하려고 노력하고 있는지 모르겠습니다.
문제
I :
tr -dc [:alpha:] < $fileDoc | wc -c
.
모든 문자를 계산하려면
tr -dc ' ' < $fileDoc | wc -c
.
모든 공간을 계산하려면
tr -dc '\n' < $fileDoc | wc -c
.
텍스트 문서의 모든 새 행을 계산합니다.
지금하려는 작업은 모든 일을 호출 할 때 문서의 다른 모든 문자를 계산하는 것입니다.
여기에 문서의 텍스트가 있습니다.
안녕하세요 이것은 테스트 텍스트 문서입니다.
123
!@#
.
[:alpha:]
, 및
\n
를 찾은 모든 것을 삭제하고 나머지 문자를 계산하는 방법이 있습니까?
해결책
이것은 트릭을해야합니다
tr -d '[:alpha:] \n' < $fileDoc | wc -c
.
또는 아마도 공백 정의에 탭을 포함시키려는 경우
tr -d '[:alpha:][:space:]' < $fileDoc | wc -c
.
OP의 주석을 기반으로 알파벳순, 공백, 숫자 및 개행을 삭제하고 나머지 남은 문자를 계산합니다.
tr -d '[:alnum:][:space:]' < $fileDoc | wc -c
.
[:alnum:]
알파벳 및 숫자의 문자에 대한 계정을 설명합니다.[:space:]
는 뉴라인을 포함한 모든 공백을 처리합니다
다른 팁
참조 용으로 여기에 게시하면 모든 작업을 원하는 경우이 awk
스크립트가 작동해야합니다.
awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
.
$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot
.
$ awk -v FS='' '
{
for(i=1; i<=NF; i++) {
if($i ~ /[a-zA-Z]/) {alpha++};
if($i == " ") {space++};
if($i !~ /[A-Za-z0-9 ]/) {spl++}
}
}
END {
printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4
. 제휴하지 않습니다 StackOverflow