파일에 특정 문자가 나타나는 횟수를 계산하는 방법은 무엇입니까?


18

예를 들어, 모든 따옴표 ( ") 문자 를 계산하려고합니다 . 우리는 파일이 따옴표보다 더 많은 따옴표를 가지고 있는지 걱정합니다.

예를 들면 다음과 같습니다.

cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"

예상 결과 :

16


bash 스크립트에서 누락 된 따옴표를 찾는 가장 쉬운 방법을 참조하십시오 . 그것이 당신이 정말로 알고 싶어하는 것이라면.
G-남자 '는 분석 재개 모니카'말한다

답변:


26

(숫자, 줄, 문자) tr와 문자를 조합 (번역 또는 삭제) 할 수 있습니다 wc.

tr -cd '"' < yourfile.cfg | wc -c

(의 -d문자로 모든 캐릭터를 c정복 "한 다음 haracters를 세십시오 c.)


20

grep 접근 방식 :

grep -o '"' file | wc -l
16 
  • -o -일치하는 부분 문자열 만 출력

또는 단일 gawk로 :

awk -v RS='' -v FPAT='"' '{print NF}' file
16
  • RS='' -빈 레코드 구분 기호 (개행 문자 대신)

  • FPAT='"' -패턴 정의 필드 값


-o표준 grep유틸리티 에 대한 비표준 GNU 확장 입니다. 의 POSIX 설명서grep 에는 언급되어 있지 않습니다 .
Andrew Henle

4

파일의 두 줄에 홀수의 큰 따옴표가있는 경우 큰 따옴표의 총 합은 짝수이며 불균형 따옴표는 감지하지 못합니다 (실제로하고 싶은 것으로 생각되지만 잘못되었을 수 있습니다) ).

awk스크립트는 입력 행에서 홀수의 따옴표가있는 행을보고합니다.

awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'

필드 구분 기호 ( FS)를 "로 설정하면 -F'"'행에 짝수의 필드가 있으면 홀수 따옴표가 있음을 의미합니다. NF최근 레코드의 필드 NR수이며 현재 레코드의 서수 ( "행 번호")입니다.

다음과 같은 입력이 주어집니다.

$ cat file
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,override_uid","true"
cluster-env,recovery_enabled","false"

우리는 얻는다

$ awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }' file
Line 3 has odd quoting: cluster-env,override_uid","true"
Line 4 has odd quoting: cluster-env,recovery_enabled","false"

같은 것

$ grep -o '"' | wc -l

이 파일에 대해 "14"를 반환합니다.



2

순수한 배쉬 :

var="$(< file.txt)"
tmp="${var//[^\"]/}"
echo ${#tmp}

tmp배열? 그렇다면 tmp무엇의 배열입니까?
Tim

@ 팀. tmp이 스 니펫은 일반적인 쉘 변수입니다. 그리고이 답변을 내리는 것은 질문에 지정된 것처럼 문자가 파일이 아닌 변수 ( var)에 나타나는 횟수를 계산하기 때문 입니다.
와일드 카드

0

시험:

grep -0 '"' File -c

그러나 같은 줄에 두 개 이상의 문자가 있으면 작동하지 않습니다. 그들은 하나의 문자로 계산됩니다


1
U & L에 오신 것을 환영합니다! 문자 대신 행을 계산하므로 실제로 질문에 대답하지 않는 것 같습니다. U & L에서는 효과적인 답변을 작성하는 것이 좋습니다 . 도움말 센터의 답변 을 참조하십시오 . 이것을 개선하고 싶을 수도 있습니다.
fra-san


0

편심 이중 GNU grep 방법 :

grep -o \" file | grep -c .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.