当前位置: 技术问答>linux和unix
请教一个shell的编写
来源: 互联网 发布时间:2016-10-19
本文导语: 如何写一个shell完成以下功能 一个文件a.sh中有如下信息: $cat a.sh 232;100;AAA 231;200;AAA 235;300;AAA 232;300;BBB 231;400;BBB 要求:如果最后一个字段相同则把第2个字段的总和、第三个字段输出到一个文件中。 ...
如何写一个shell完成以下功能
一个文件a.sh中有如下信息:
$cat a.sh
232;100;AAA
231;200;AAA
235;300;AAA
232;300;BBB
231;400;BBB
要求:如果最后一个字段相同则把第2个字段的总和、第三个字段输出到一个文件中。
上面应该输出的信息是
600;AAA
700;BBB
一个文件a.sh中有如下信息:
$cat a.sh
232;100;AAA
231;200;AAA
235;300;AAA
232;300;BBB
231;400;BBB
要求:如果最后一个字段相同则把第2个字段的总和、第三个字段输出到一个文件中。
上面应该输出的信息是
600;AAA
700;BBB
|
首先你需要对第3个字段排序吧;试试下面的语句:
假设源文件这样:
#cat > test.txt
231;200;AAA
231;400;BBB
232;100;AAA
232;300;BBB
235;300;AAA
执行:#sort -t";" -k 3,3 test.txt | awk -F; 'BEGIN{OFS="; ";str="";sum=0;}{sum=sum+$2; if(str!=$3 && str!=""){print sum-$2,str; sum=$2} str=$3}END{print sum,str}' > test.result
#cat test.result
600; AAA
700; BBB
假设源文件这样:
#cat > test.txt
231;200;AAA
231;400;BBB
232;100;AAA
232;300;BBB
235;300;AAA
执行:#sort -t";" -k 3,3 test.txt | awk -F; 'BEGIN{OFS="; ";str="";sum=0;}{sum=sum+$2; if(str!=$3 && str!=""){print sum-$2,str; sum=$2} str=$3}END{print sum,str}' > test.result
#cat test.result
600; AAA
700; BBB