awk相邻记录相加

对于不同批次检出出的水果数量累加

cat a.txt
苹果 Apple  10
梨   pear   8
柠檬 lemon  4
梨   pear   8
桃子 peach  11
梨   pear   10
苹果 Apple  8
梨   pear   8
梨   pear   2
桃子 peach  18
梨   pear   1
桔子 orange 5

1)首先对文本进行排序,按第一列名称进行排序

sort -k 1,1 a.txt > b.txt
 cat b.txt
梨   pear   1
梨   pear   10
梨   pear   2
梨   pear   8
梨   pear   8
梨   pear   8
柠檬 lemon  4
桃子 peach  11
桃子 peach  18
桔子 orange 5
苹果 Apple  10
苹果 Apple  8

2)利用awk对相同名称的水果数量进行累加

awk 'BEGIN{sum=0}NR==1{name=$1;english_name=$2;sum+=$3}NR>1{if($1 == name) {sum+=$3;}else {print name,english_name,sum;name=$1;english_name=$2;sum=$3}} END{print name,english_name,sum}' b.txt
梨 pear 37
柠檬 lemon 4
桃子 peach 29
桔子 orange 5
苹果 Apple 18

解析:首先在BEGIN中对sum初始化;判断如果是第一行的记录,就把name,english_name以及sum赋值;
如果是大于1的行,那么就根据name进行对比,如果与上一条记录的name相等,就将数量累加到sum上,否则就输出记录,对变量重新赋值,sum初始化为当前记录的数量。
最后在END中输出最后累加记录的结果。搞定

你可能感兴趣的:(awk相邻记录相加)