无论大小写如何计算出现次数?
How to count occurrences no matter its case?
table
chr10 10482 10484 0 11 + CA
chr10 10486 10488 0 12 + ca
chr10 10487 10489 0 13 + Ca
chr10 10490 10492 0 13 + cA
chr10 10491 10493 0 12 + CT
chr10 10494 10496 6.66667 15 + ca
chr10 10495 10497 6.66667 15 + cc
我想计算第 7 列中可以找到 "CA" 的行数,无论两个字母中的任何一个是大写还是小写。
所需的输出为 5。
这两个命令(下面)给出了一个空输出
cat table | awk ' ==/^[Cc][Aa]/{++count} END {print count}'
awk 'BEGIN {IGNORECASE = 1} ==/"CA"/ {++count} END {print count}' table
下面的命令returns值为1
awk 'BEGIN {IGNORECASE = 1} END {if (=="CA"){++count} {print count}}' table
注:我的实际table有几千万行,不想中间写一个table来统计。 (我也需要对其他文件重复此任务)。
您的语法有一点问题:您说的是 var == "string"
或 var ~ regexp
,但您说的是 var ~ /"string"/
。使用正确的组合使您的命令有效:
$ awk ' ~ /^[Cc][Aa]/{++count} END {print count+0}' file
5
$ awk 'BEGIN {IGNORECASE = 1} =="CA" {++count} END {print count+0}' file
5
此外,您可能希望使用 toupper()
(或 tolower()
)来检查这一点,而不是使用 IGNORECASE
标志:
awk 'toupper() == "CA" {++count} END {print count+0}' file
注意打印 count + 0
而不是 count
的技巧。这样,如果之前未设置变量,我们将其转换为 0
。有了这个,只要没有匹配,它就会打印 0
;如果我们只是 print count
,它会 return 一个空字符串。
table
chr10 10482 10484 0 11 + CA
chr10 10486 10488 0 12 + ca
chr10 10487 10489 0 13 + Ca
chr10 10490 10492 0 13 + cA
chr10 10491 10493 0 12 + CT
chr10 10494 10496 6.66667 15 + ca
chr10 10495 10497 6.66667 15 + cc
我想计算第 7 列中可以找到 "CA" 的行数,无论两个字母中的任何一个是大写还是小写。
所需的输出为 5。
这两个命令(下面)给出了一个空输出
cat table | awk ' ==/^[Cc][Aa]/{++count} END {print count}'
awk 'BEGIN {IGNORECASE = 1} ==/"CA"/ {++count} END {print count}' table
下面的命令returns值为1
awk 'BEGIN {IGNORECASE = 1} END {if (=="CA"){++count} {print count}}' table
注:我的实际table有几千万行,不想中间写一个table来统计。 (我也需要对其他文件重复此任务)。
您的语法有一点问题:您说的是 var == "string"
或 var ~ regexp
,但您说的是 var ~ /"string"/
。使用正确的组合使您的命令有效:
$ awk ' ~ /^[Cc][Aa]/{++count} END {print count+0}' file
5
$ awk 'BEGIN {IGNORECASE = 1} =="CA" {++count} END {print count+0}' file
5
此外,您可能希望使用 toupper()
(或 tolower()
)来检查这一点,而不是使用 IGNORECASE
标志:
awk 'toupper() == "CA" {++count} END {print count+0}' file
注意打印 count + 0
而不是 count
的技巧。这样,如果之前未设置变量,我们将其转换为 0
。有了这个,只要没有匹配,它就会打印 0
;如果我们只是 print count
,它会 return 一个空字符串。