Bash를 사용하는 문자열에서 문자 발생 횟수
나는 Bash를 사용하는 문자열에서 char 발생 횟수를 계산해야 합니다.
다음 예제에서 문자가 다음과 같은 경우(예:t의 정확한 발생 횟수입니다.t에var그러나 문자가 쉼표 또는 세미콜론이면 0이 출력됩니다.
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
예를 들어 다음과 같이 다른 모든 문자를 제거하고 남은 항목을 셀 수 있습니다.
var="text,text,text,text"
res="${var//[^,]}"
echo "$res"
echo "${#res}"
인쇄 예정
,,,
3
또는
tr -dc ',' <<<"$var" | awk '{ print length; }'
또는
tr -dc ',' <<<"$var" | wc -c #works, but i don't like wc.. ;)
또는
awk -F, '{print NF-1}' <<<"$var"
또는
grep -o ',' <<<"$var" | grep -c .
또는
perl -nle 'print s/,//g' <<<"$var"
다음을 사용합니다.awk명령:
string="text,text,text,text"
char=","
awk -F"${char}" '{print NF-1}' <<< "${string}"
저는 줄을 나누는 중입니다.$char결과 필드 수에서 1을 뺀 값을 인쇄합니다.
셸이 지원하지 않는 경우<<<연산자, 사용echo:
echo "${string}" | awk -F"${char}" '{print NF-1}'
다음을 조합하여 수행할 수 있습니다.tr그리고.wc명령을 실행합니다.예를 들어, 세는 방법e현 상태에서referee
echo "referee" | tr -cd 'e' | wc -c
산출량
4
설명: 명령tr -cd 'e''e' 이외의 모든 문자를 제거하고 명령wc -c나머지 문자를 카운트합니다.
명령과 같은 여러 줄의 입력도 이 솔루션에 적합합니다.cat mytext.txt | tr -cd 'e' | wc -c깡통이 세다e서류철에mytext.txt파일에 많은 줄이 포함되어 있다고 생각해도 됩니다.
업데이트 ***
숫자(@tom10271)의 여러 공백을 해결하려면 piped tr 명령을 추가하기만 하면 됩니다.
tr -d ' '
예:
echo "referee" | tr -cd 'e' | wc -c | tr -d ' '
awk는 매우 멋지지만, 왜 그것을 단순하게 하지 않습니까?
num=$(echo $var | grep -o "," | wc -l)
모든 사람들의 훌륭한 답변과 의견을 바탕으로, 이것은 가장 짧고 달콤한 버전입니다.
grep -o "$needle" <<< "$haystack" | wc -l
또한 이것도 확인해 보세요, 예를 들어 우리는 세고 싶습니다.t
echo "test" | awk -v RS='t' 'END{print NR-1}'
또는 안에python
python -c 'print "this is for test".count("t")'
또는 더 나은 방법으로 스크립트를 동적으로 만들 수 있습니다.awk
echo 'test' | awk '{for (i=1 ; i<=NF ; i++) array[$i]++ } END{ for (char in array) print char,array[char]}' FS=""
이 경우 출력은 다음과 같습니다.
e 1
s 1
t 2
만약 당신의 서버가 있다면 awk는 잘 작동합니다.
var="text,text,text,text"
num=$(echo "${var}" | awk -F, '{print NF-1}')
echo "${num}"
다음을 제안합니다.
var="any given string"
N=${#var}
G=${var//g/}
G=${#G}
(( G = N - G ))
echo "$G"
다른 프로그램에 대한 호출 없음
그awk지금까지 제공된 솔루션은 텍스트에 줄 바꿈이 있는 경우 모두 중단됩니다.예:
text="one,two,thr
ee,four"
DELIM=','
count=$( awk -F"$DELIM" '{print NF-1}' <<<"${text}" )
echo $count
결과:
2
1
줄 바꿈에서도 올바르게 작동하는 솔루션은 다음과 같습니다.
text="one,two,thr
ee,four"
DELIM=','
count=$( awk 'BEGIN{RS="'"$DELIM"'";FS=""}END{print NR-1}' <<<"${text}" )
echo $count
결과는3.
언급URL : https://stackoverflow.com/questions/16679369/count-occurrences-of-a-char-in-a-string-using-bash
'programing' 카테고리의 다른 글
| SQL Server 2008을 사용하여 테이블에서 상위 1000개 행을 삭제하는 방법은 무엇입니까? (0) | 2023.05.17 |
|---|---|
| 병렬을 제한하려면 어떻게 해야 합니까?각자? (0) | 2023.05.17 |
| 'urlencode'에는 'urlencode' 특성이 없습니다. (0) | 2023.05.12 |
| 파일에서 대소문자를 구분하지 않는 문자열을 grep하는 방법은 무엇입니까? (0) | 2023.05.12 |
| _id를 집계에서 숨기는 방법? (0) | 2023.05.12 |