예를 들어, 우리는 모든 따옴표( ) 문자를 계산하려고 합니다. "
파일에 있어야 할 것보다 더 많은 따옴표가 있는지 걱정할 뿐입니다.
예를 들어:
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
-d
c
보수의 모든 문자를 제거한 "
다음 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'"'
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"를 반환합니다.
답변4
또 다른 단일 awk
방법:
awk '{ count+=gsub(/"/, "") } END{ print count+0 }'