awk 语句 - 如果没有找到 (grep'ed) 做

标签 awk

我的表文件示例看起来像这样

Name1   xxxxx  34
Name1   xxxxx  37
Name2   aaaaa  59
Name2   xxxxx  90
Name4   Name3  12

名称文件看起来像这样
Name1 
Name2
Name3
Name4 

我要 awk匹配 Name1/2/3/4从名称文件到表文件 $1 并打印 $3 的总和。 如果未找到名称,则打印 0 - 我该怎么做 if声明于 awk ?

我已经做了什么:
for i in $(cat Name_file)
do 
cat table | awk -v NAME="$i" '($1==NAME) {SUM+=$3} END {print NAME"\t"SUM}'
done

给出输出
Name1   71
Name2   149
Name3   
Name4   12

几乎完美 - 我想添加 0Name3得到这样的输出
Name1   71
Name2   149
Name3   0
Name4   12

这么多问题是:如何添加if not found do awk 中的函数?

最佳答案

Y 不需要任何“未找到”行为。你只是没有正确初始化 SUM计数前的变量。使用 BEGIN {SUM = 0}为了那个原因。

如果您需要明确地找到/未找到行为,请执行类似的操作。首先,初始化一些变量 BEGIN {FOUND = 0}然后在模式匹配上进行某种更改:(...) {FOUND = FOUND+1}最后用 if(FOUND!=0) 测试一下.

关于awk 语句 - 如果没有找到 (grep'ed) 做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17084127/

相关文章:

linux - awk - 计算列中某个值的出现次数

linux - 列更改是使列空白而不是更改

regex - sed/awk : replace megabytes with bytes (insert zeros)

bash - 删除第 4 列中包含范围模式的行

awk - 使用 sed 命令将缩写字符串 (U.S.A.) 替换为 USA

shell - SED 或 AWK 全部替换为另一个文件中的模式

bash - 将分区和分割(A.1 和 A.1.1)分配给文件中的数据

regex - 将文本从一行复制到另一行

sed - csv文件过滤

awk - 如何在 END 之前检测 awk 中的最后一行?