gpt4 book ai didi

awk - 使用 awk 计算列中特定值的数量

转载 作者:行者123 更新时间:2023-12-01 16:26:30 24 4
gpt4 key购买 nike

我有数据(data.csv):

"1",5.1,"s"
"2",3.3,"s"
"3",2.7,"c"

我想用 AWK 来计算第三个元素是“s”或“c”的行数(count.awk):

BEGIN{FS=","; s_count=0; c_count=0}
($3=="s"){s_count++}
($3=="c"){c_count++}
END{print s_count; print c_count}

然后

$awk -f count.awk data.csv

但这不起作用。其输出为:

0
0

这不是我所期望的。为什么?

$ awk -V
GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.2, GNU MP 5.1.2)

注意:我在 cygwin 上使用 Awk。

最佳答案

问题是您的目标字段嵌入了双引号,因此您也需要匹配它们,方法是包含它们 - \-转义 - 在要匹配的字符串中:

awk '
BEGIN{FS=","; s_count=0; c_count=0}
($3=="\"s\"") {s_count++}
($3=="\"c\"") {c_count++}
END{ print s_count; print c_count }
' data.csv
<小时/>

顺便说一句,您可以稍微简化您的 awk 程序:

  • 不需要括号(尚未在 cygwin 上验证,但考虑到它是由 awk 解释字符串,我认为这并不重要)
  • 您并不严格需要初始化输出变量,因为 awk 在数字上下文中将未初始化的变量默认为 0
BEGIN{FS=","}
$3 == "\"s\"" {s_count++}
$3 == "\"c\"" {c_count++}
END{ print s_count; print c_count }

关于awk - 使用 awk 计算列中特定值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com