表
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 ' $7 ==/^[Cc][Aa]/{++count} END {print count}'
awk 'BEGIN {IGNORECASE = 1} $7==/"CA"/ {++count} END {print count}' table
以下命令返回值1
awk 'BEGIN {IGNORECASE = 1} END {if ($7=="CA"){++count} {print count}}' table
注意:我的实际表格长达数千万行,因此我不想将表格作为中间值来计算。 (我还需要为其他文件重复此任务)。
答案 0 :(得分:3)
您的语法有一点问题:您要么说var == "string"
,要么说var ~ regexp
,但您说的是var ~ /"string"/
。使用正确的组合可以使命令工作:
$ awk '$7 ~ /^[Cc][Aa]/{++count} END {print count+0}' file
5
$ awk 'BEGIN {IGNORECASE = 1} $7=="CA" {++count} END {print count+0}' file
5
此外,您可能希望使用toupper()
(或tolower()
)来检查此项,而不是使用IGNORECASE
标记:
awk 'toupper($7) == "CA" {++count} END {print count+0}' file
请注意打印count + 0
而非count
的技巧。这样,如果之前没有设置,我们会将变量转换为0
。这样,只要没有匹配,就会打印0
;如果我们只是print count
,它将返回一个空字符串。