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中輸出最後累加記錄的結果。搞定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章