我正在尝试从输入文件 input.txt :
下面获得一些东西ron@xyz.com 8 10
ron@xyz.com 9 11
jack@abc.com 2 6
test@pqr.com 2 7
jack@abc.com 8 5
test@pqr.com 3 5
现在我想要 op.txt :
ron@xyz.com 38
jack@abc.com 21
test@pqr.com 17
说明:
1)只需要一次记录(电子邮件)。
2)对于相同电子邮件ID的所有记录,要求第二列+第三列($ 2 + $ 3)的总和。
e.g:
文件包含两个 ron@xyz.com
ron@xyz.com 8 10
ron@xyz.com 9 11
因此,第1行(8 + 10)加第二行(9 + 11)的总和等于38。
如果shell脚本更可行,那么我可以使用它。
的编辑:
我确实尝试了以下命令,但我不知道如何整合两者,因为第一个找到了指定关键词的总和:
cat input.txt | grep "ron@" | awk '{print $1+$2}'|paste -sd+ | bc
这个找到第一列的唯一条目:
cat input.txt |awk '{print $1}'|uniq
答案 0 :(得分:0)
awk '{
a[$1]+=$2+$3
}
END {
for (i in a)
print i, a[i]
}' input.txt > op.txt
答案 1 :(得分:0)
如果input.txt要添加更多列,则此命令将更有用。
awk'{for(i = 2; i< = NF; i ++)a [$ 1] + = $ i} END {for(i in a)print i,a [i]}'infile