使用awk命令解析perl中的文件

时间:2013-12-16 18:07:33

标签: regex perl awk

我正在尝试从输入文件 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

2 个答案:

答案 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