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

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

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

예를 들어:

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

답변1

다음과 같이 (단어, 줄, 문자 수 계산 tr)을 결합(문자 번역 또는 제거) 할 수 있습니다 .wc

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

-dc보수의 모든 문자를 제거한 "다음 c문자(바이트)를 계산합니다. 일부 버전은 ASCII가 아닌 문자 수에 더 적합한 또는 플래그를 wc지원할 수 있습니다 .-m--chars

답변2

grep방법:

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

아니면 싱글로멍하니:

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

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

답변3

파일의 두 줄에 홀수 개의 큰따옴표가 있는 경우 큰따옴표의 합은 짝수가 되며 균형이 맞지 않는 따옴표를 감지하지 못합니다(실제로 원하는 것이 이것이라고 생각하지만 틀릴 수 있습니다). 의).

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

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

필드 구분 기호( )를 with FS로 설정했습니다 . 이는 행에 짝수 개의 필드가 있는 경우 홀수 개의 따옴표가 있음을 의미합니다. 는 가장 최근 레코드의 필드 수이고 현재 레코드의 시퀀스 번호("라인 번호")입니다."-F'"'NFNR

다음 입력이 주어지면:

$ 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"를 반환합니다.

답변4

또 다른 단일 awk방법:

awk '{ count+=gsub(/"/, "") } END{ print count+0 }'

관련 정보