当前位置: 技术问答>linux和unix
shell编程问题!(从文件取记录,去重,累加)在线等!
来源: 互联网 发布时间:2016-04-08
本文导语: 有一个文件file里面有多条(行)记录,现在要从文件从提取某些记录, 输出货物代码以及相应的利润,货物代码是记录中从第5位开始长度是10,利润是从第20位开始长度是4,要求输出的结果类似下面 1111111111 0.30...
有一个文件file里面有多条(行)记录,现在要从文件从提取某些记录,
输出货物代码以及相应的利润,货物代码是记录中从第5位开始长度是10,利润是从第20位开始长度是4,要求输出的结果类似下面
1111111111 0.30
2222222222 0.50
1111111111 0.31
想上面输出的那样,有重复的货物代码,就要输出一个,并且要把相应的利润累加起来,上面的例子期望的结果就是
1111111111 0.61 《-------- 0.30与0.31加起来
2222222222 0.50
请问该怎么写shell程序 用awk 或是别的
输出货物代码以及相应的利润,货物代码是记录中从第5位开始长度是10,利润是从第20位开始长度是4,要求输出的结果类似下面
1111111111 0.30
2222222222 0.50
1111111111 0.31
想上面输出的那样,有重复的货物代码,就要输出一个,并且要把相应的利润累加起来,上面的例子期望的结果就是
1111111111 0.61 《-------- 0.30与0.31加起来
2222222222 0.50
请问该怎么写shell程序 用awk 或是别的
|
重新提交下,改了几个问题
代码保存为test.pl文件:
输入文件保存为list.txt:
1111111111 0.30
2222222222 0.50
1111111111 0.31
3333333333 0.45
1111111111 1.11
执行./test.pl list.txt,实现取记录,去重,累加,排序后的输出:
1111111111 1.72
2222222222 0.50
3333333333 0.45
代码保存为test.pl文件:
#!/usr/bin/perl -w
use strict;
my %result = ();
my $goods = "";
my $profit = "";
while ( ) {
$goods = substr $_, 4, 10;
$profit = substr $_, 19, 5;
$result{$goods} += $profit;
}
foreach $goods ( sort keys %result ) {
printf "%s %.02fn", $goods, $result{$goods};
}
输入文件保存为list.txt:
1111111111 0.30
2222222222 0.50
1111111111 0.31
3333333333 0.45
1111111111 1.11
执行./test.pl list.txt,实现取记录,去重,累加,排序后的输出:
1111111111 1.72
2222222222 0.50
3333333333 0.45
|
awk -F'n' '{arr[substr($0,5,10)]+=strtonum(substr($0,20,5)) } END {for(i in arr )printf i" " arr[i]"n"}' test.txt