我有一個列表,諸如:排序列表和相加金額的shell
10,汽車輪胎
8,汽車輪胎
4,輪子
18,撬棍
5,插座
5,千斤頂
8,千斤頂
第一個數字是數量,第二個是項目名稱。我需要得到這個清單,以便它只顯示每個項目一次,並且如果項目出現多次,它將數量加在一起。這正常工作,輸出將是:
18,汽車輪胎
4,車輪
18,撬棍
18,千斤頂
這將需要在幾千年的格式列表上的工作行,最好在Linux shellcript編碼,任何幫助表示感謝,謝謝!
我有一個列表,諸如:排序列表和相加金額的shell
10,汽車輪胎
8,汽車輪胎
4,輪子
18,撬棍
5,插座
5,千斤頂
8,千斤頂
第一個數字是數量,第二個是項目名稱。我需要得到這個清單,以便它只顯示每個項目一次,並且如果項目出現多次,它將數量加在一起。這正常工作,輸出將是:
18,汽車輪胎
4,車輪
18,撬棍
18,千斤頂
這將需要在幾千年的格式列表上的工作行,最好在Linux shellcript編碼,任何幫助表示感謝,謝謝!
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
怎麼樣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";
}
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]);
}
}'
驚人!!!!!!!! – Boolean 2010-01-20 01:08:28
我懷疑它是否真的有效......我沒有看到它計算的總和。 並且語法+0已過時。 – 2010-01-20 01:34:48