我有一个列表,例如:
10,汽车轮胎第一个数字是数量,第二个是项目名称。我需要获取此列表,以便它只显示每个项目一次,如果项目出现多次,它会将数量加在一起。这项工作正确的输出将是:
18,汽车轮胎 4,轮这需要以几千行的格式处理列表,最好用Linux shellcript编写,任何帮助表示感谢,谢谢!
答案 0 :(得分:0)
看看:
man sort
man awk
您需要的实际命令是:
sort -n -t, +1 yourfile.txt | awk ......
你也可以在awk中完全做到这一点 Sum by group
答案 1 :(得分:0)
awk -F"," '{ t[$2] = t[$2] + $1 }
END{
for(o in t){
print o, t[o]
}
}' file
输出
$ ./shell.sh
Crowbars 18
Wheels 4
Car Tyres 18
Jacks 18
答案 2 :(得分:0)
perl脚本怎么样?:
#!/usr/bin/perl -w
use strict;
my %parts;
while (<>) {
chomp;
my @fields = split /,/, $_;
if (scalar @fields > 1) {
if ($parts{$fields[1]}) {
$parts{$fields[1]} += $fields[0];
} else {
$parts{$fields[1]} = $fields[0];
}
}
}
foreach my $k (keys %parts) {
print $parts{$k}, ",$k\n";
}
答案 3 :(得分:0)
awk -v FS=, '{ if (! $2 in a) {
a[$2] = $1;
}
else {
a[$2] += $1;
}
}
END {
for (name in a) {
printf("%s\t%d\n", name, a[name]);
}
}'