例如,我们要统计所有引号 ( "
) 字符;我们只是担心文件中的引号是否多于应有的数量。
例如:
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
字符(字节)。某些版本wc
可能支持-m
or--chars
标志,这将更适合非 ASCII 字符计数。
答案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) }'
我们将字段分隔符 ( FS
) 设置为"
with -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 }'