Van egy fájlom, aminek a második oszlopa alapján kellene összegezni az első oszlop számait.
pl.
023:012
022:011
024:012
003:008
001:011
Ennek a feldolgozása után szeretném látni, hogy a 008-asból 3, a 011-esből 23 és a 012-esből 47 db van.
- 1411 megtekintés
Hozzászólások
Egy hete volt hasonló téma: http://hup.hu/node/101821
- A hozzászóláshoz be kell jelentkezni
awk -F ":" '{ sum[$2]++ } END { for (i in sum) { printf("%s -> %d\n", i, sum[i])}}' minta.txt
Helyett:
awk -F ":" '{ sum[$2] += $1 } END { for (i in sum) { printf("%s -> %d\n", i, sum[i])}}' minta.txt
-----
"Én vagyok a hülye, hogy leállok magával vitatkozni."
- A hozzászóláshoz be kell jelentkezni
#!perl
use 5.010;
use strict;
use warnings;
use Scalar::Util qw(looks_like_number);
my %data;
while ( my $line = <ARGV> ) {
chomp $line;
my ( $cnt, $key ) = split /:/, $line, 2;
$data{"$key"} += $cnt if defined $key and looks_like_number $cnt;
}
printf "%3s:%03d\n", $_, $data{$_} for sort keys %data;
- A hozzászóláshoz be kell jelentkezni
Köszi a választ mindenkinek!
Van bennem egy olyan irány is, hogy "á, ez annyira adatbázis-szagú téma, hogy be kéne olvasni egy sqlite táblába a fájlt, és aztán select count(*) ... group by... neki". Ha valaki csinált már efféléket, szívesen vennék valami eligazítást, hogy érdemes-e ez irányba kutakodni.
- A hozzászóláshoz be kell jelentkezni
Tipikus dilemmára egy tipikus válasz: ha egyszer szeretnéd feldolgozni a fájlodat, egyszer megkapni a kimenetet, akkor nem nyersz semmit adatbázissal, csak megnöveled a feldolgozási időt és elbonyolítod a dolgodat.
Ha többször, különböző feltételek szerint szeretnéd látni az eredmény részét v. egészét, akkor van létjogosultsága a db-be passzírozásnak és onnan kiolvasásnak.
Más kérdés, hogy a szkriptes megoldást is lehet értelmesen és gyorsan (tovább)szűrni, de magából a kérdésfeltevésből sejthető, hogy az Neked nem pálya...
és megint más kérdés, hogy ugyanaból sejthető, hogy momentán az sqlite sem. :)
De igen, érdemes kutakodni, ha a fentiek tükrében indokolt, ha jobban megy, vagy csak azért, hogy később jobban menjen.
- A hozzászóláshoz be kell jelentkezni
Köszi! :-)
- A hozzászóláshoz be kell jelentkezni
Just for fun:
#!/usr/bin/python
import sys, collections
c = collections.Counter()
for l in open(sys.argv[1]).readlines():
c[l.strip().split(":")[1]] += 1
print c
- A hozzászóláshoz be kell jelentkezni