如何计算后面跟着特定值的出现次数?(添加if语句)

  • 本文关键字:if 添加 语句 计算 何计算 bash shell awk
  • 更新时间 :
  • 英文 :



如何计算仅后跟E*之后的特定值的出现次数?例如:"XXXX"?

file.txt:

E2dd,Rv0761,Rv1408  
2s32,Rv0761,Rv1862,Rv3086  
6r87,Rv0761
Rv2fd90c,Rv1408
Esf62,Rv0761
Evsf62,Rv3086

我试过了输入:

awk -F, '{map[$2]++} END { for (key in map) { print key, map[key] } }' file.txt

并添加:

if [[ $line2 == `E*` ]];then

但不工作,有语法错误

预期输出:

total no of occurrences: 
Rv0761: 2
Rv3086:1

现在我只能计算第二个值的所有出现次数

if [[ $line2 == `E*` ]];then

这绝对不是合法的GNUAWKif语句,请参阅if语句以找到允许的内容,尽管在这种情况下不需要它,因为您可能会如下所示,让file.txt内容是

E2dd,Rv0761,Rv1408  
2s32,Rv0761,Rv1862,Rv3086  
6r87,Rv0761
Rv2fd90c,Rv1408
Esf62,Rv0761
Evsf62,Rv3086

然后

awk 'BEGIN{FS=","}($1~/^E/){map[$2]++} END { for (key in map) { print key, map[key] } }' file.txt

给出输出

Rv3086 1
Rv0761 2

说明:动作(包含在{}中(可以在模式之前,这确实将它们的执行限制为与模式匹配的行(换句话说:条件确实成立(。在上面的示例中,模式是$1~/^E/,这意味着第一列确实以E开始。

(在gawk 4.2.1中测试(

你太接近了。您只缺少REGEX来标识以'E'开头的记录,然后在输出上连接一个":"以产生所需结果(不按排序顺序(。例如,你可以做:

awk -F, '/^E/{map[$2]++} END { for (key in map) { print key ":", map[key] } }' file.txt

示例输出

使用file.txt中的数据,您将获得:

Rv3086: 1
Rv0761: 2

如果您需要以某种方式对输出进行排序,只需使用所需的任何选项将awk命令的输出管道传输到sort即可。

相关内容

  • 没有找到相关文章

最新更新