【发布时间】:2013-06-13 18:56:28
【问题描述】:
我的表格文件示例如下所示
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 - 我怎么能在awk 中做这样的if 声明?
我已经做了什么:
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
几乎完美 - 我想将 0 添加到 Name3 以获得这样的输出
Name1 71
Name2 149
Name3 0
Name4 12
这么多问题是:如何在awk中添加if not found do函数?
【问题讨论】:
-
我可能会建议在bash 中使用
$(<file)而不是$(cat file)。第一种表示法不调用外部实用程序。也使用awk '...' file而不是cat file | awk '...'。 -
你的意思是
for i in $(< Name_file)?你的建议和while read WORD; do command ; done < Name_file有什么区别? -
是的,使用
$(<Name_file)。它是$(cat Name_file)的内部bash快捷方式。所以它不会调用cat,只是打开文件。read内部函数读取<file重定向到while的文件。Read可以将多个单词读取到多个变量或数组中。
标签: awk