Van egy olyan fájlom, amelynek egy-egy sorában egy-egy (maximum ötjegyű) szám áll. A számok nemcsökkenő sorrendben következnek egymás után.
Tudtok javasolni olyan módszert, amellyel az előforduló számok darabszámát könnyen le tudom kérdezni? Valami uniq/wc/? kombinációra gondolok.
Pl. ilyen fájl esetén:
508
508
508
508
1104
1104
1104
1105
Ilyen megoldásra vágyom:
508: 4
1104: 3
1105: 1
- 1282 megtekintés
Hozzászólások
uniq --help | grep count
- A hozzászóláshoz be kell jelentkezni
(sort -n | uniq -c | while read c v; do echo $v: $c; done ) <<EOT
508
508
508
508
1104
1104
1104
1105
EOT
Vagy valami ilyesmi.
- A hozzászóláshoz be kell jelentkezni
A -c opcióra gondoltál, de az nem a kívánt formában adja; bár tény, viszonylag egyszerű átalakítani. Pl így (meg persze lehetne awk-kal is :-)) :
uniq -c file | sed -e 's/\([0-9][0-9]*\) *\([0-9][0-9]*\)/\2: \1/
- A hozzászóláshoz be kell jelentkezni
bocs, a fizetését ne vegyem fel helyette? :)
- A hozzászóláshoz be kell jelentkezni
Az is jó, ha írok egyet neked?
Fuszenecker Róbert
- A hozzászóláshoz be kell jelentkezni
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<unsigned int, unsigned int> table;
while (not cin.eof())
{
unsigned int num;
cin >> num;
table[num]++;
}
for (map<unsigned int, unsigned int>::iterator it = table.begin(); it != table.end(); ++it)
{
cout << it->first << ": " << it->second << endl;
}
return 0;
}
Ez a program szabad szoftver, szabadon terjeszthető és/vagy módosítható a GNU GPL 3-ban leírtak szerint.
Fuszenecker Róbert
- A hozzászóláshoz be kell jelentkezni
awk '{szam[$0]++;} END { for ( i in szam ) { print i ": " szam[i]; } }'
szerk: lehagytam zárójelet
- A hozzászóláshoz be kell jelentkezni
uniq -c
adja a fordítottját, a te esetedben
4 508
3 1104
1 1105
uniq -c file.txt | sort -r
-rel az előfordulások száma szerint csökkenőbe rendezheted.
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm mindenkinek a lelkes megoldást; teljesen kielégít, amit írtatok.
- A hozzászóláshoz be kell jelentkezni
még egy perles megoldás a teljes kielégülésért:
perl -nle '$h{$_}++}{print map{$_.": ".$h{$_}."\n"}sort{$a<=>$b}keys %h'
- A hozzászóláshoz be kell jelentkezni
Én a $_." résznél már kielégültem.
Most megyek, elszívok egy cigit.
- A hozzászóláshoz be kell jelentkezni