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

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

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

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



답변

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

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

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


답변

grep 접근 방식 :

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

또는 단일 gawk로 :

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

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


답변

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

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


답변

또 다른 단일 gawk접근법 :

awk -v RS=\" 'END{print NR-1}'


답변

순수한 배쉬 :

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


답변

시험:

grep -0 '"' File -c

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


답변

grep -oF ‘ “‘파일 | wc -l

-F는 고정 문자열을 나타냅니다