сортировка некоторых данных - PullRequest
1 голос
/ 18 августа 2011

Я пытаюсь отсортировать некоторые данные в bash.Данные выглядят так, как показано ниже.

    20110724.gz   1347
    20110724.gz   2128
    20110725.gz   1315
    20110725.gz   2334
    20110726.gz   808
    20110726.gz   1088
    -bash-3.2$

После сортировки они должны выглядеть следующим образом:

    20110724.gz 3475
    20110725.gz 3649
    20110726.gz 1896

По существу, на определенную дату данные суммируются.Может кто-нибудь помочь?Спасибо.

хмм, надеюсь, я это выясню через несколько дней.

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Вот быстрый и грязный perl oneliner:

$ perl -e 'my %h = (); while (<>) { chomp; my ($fname, $count) = split; $h{$fname} += $count;} foreach my $k (sort keys %h) {print $k, " ", $h{$k}, "\n"}' < datafile
0 голосов
/ 18 августа 2011

Вот решение Perl.

Использование: script.pl input.txt > output.txt

Код:

use warnings;
use strict;
use ARGV::readonly;

my %sums;
while (<>) {
    my ($date, $num) = split;
    $sums{$date} += $num;
}
for my $date (sort keys %sums) {
    print "$date $sums{$date}\n";
}

Или как однострочный:

$ perl -we 'my %h; while(<>) { ($d,$n)=split; $h{$d}+=$n; } print "$_ $h{$_}\n" for sort keys %h;' data2.txt

Если вам нужна числовая сортировка по датам:

sort { substr($a,0,8) <=> substr($b,0,8) } keys %sums;
0 голосов
/ 18 августа 2011

Вам не нужен Perl для этого.Некоторые хитрости оболочки помогут:)

sort -n -k1,8 <file | while true ; do
    if ! read line ; then
        test -n "$accfile" && echo $accfile $value
        break
    fi
    line=$(echo $line | tr -s ' ' )
    curfile=$(echo $line | cut -d\  -f1)
    curvalue=$(echo $line | cut -d\  -f2)
    if [ $curfile != "$accfile" ] ; then
        # new file, output the last if not empty
        test -n "$accfile" && echo $accfile $value
        accfile=$curfile
        value=$curvalue
    else
        value=$(expr $value \+ $curvalue)
    fi
done

Параметр k указывает сортировку, какие символы используются для сортировки.Поскольку даты представлены в порядке нумерации, работает сортировка чисел (-n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...