Hola!
Tengo un fichero en el que hay lineas repetidas de esta forma:
Ejemplo.txt contiene:
pepe
juan
pablo
pepe
juan
pedro
Y necesito obtener esto:
2 pepe
2 juan
1 pablo
1 pedro
Es decir el numero de apariciones de cada linea
He probado con uniq pero no he tenido exito ¿Alguna sugerencia?
Un saludo!

una solucion con perl
probate este programita, yo lo llame programa.pl
unless($#ARGV){
open(IN,"<$ARGV[0]") or die $!;
}else{
print STDERR "Debe dar un nombre de archivo, y solo uno!\n";
}
while(<IN>){
chomp;
/\s+(\w+)/;
$cuenta{"$1"}++ unless $1 eq "";
}
foreach $llave (sort keys %cuenta) {
print "$cuenta{$llave} $llave\n";
}
y si tu archivo que tenes que procesar se llama ejemplo.txt llama al programa con el comando
perl programa.pl ejemplo.txt
espero que te sirva, saludos
un error
disculpa me olvide de cambiar algo en la primera linea, el codigo sería
if($#ARGV==0){
open(IN,"<$ARGV[0]") or die $!;
}else{
print STDERR "Debe dar un nombre de archivo, y solo uno!\n";
}
while(<IN>){
chomp;
/\s+(\w+)/;
$cuenta{"$1"}++ unless $1 eq "";
}
foreach $llave (sort keys %cuenta) {
print "$cuenta{$llave} $llave\n";
}
saludos, espero que ayude
ultima correccion
if($#ARGV==0){
open(IN,"<$ARGV[0]") or die $!;
}else{
print STDERR "Debe dar un nombre de archivo, y solo uno!\n";
}
while(<IN>){
chomp;
$cuenta{"$1"}++ if /\s+(\w+)/;
}
foreach $llave (keys %cuenta) {
print "$cuenta{$llave} $llave\n";
}
ultima lo prometo
if($#ARGV==0){
open(IN,"<$ARGV[0]") or die $!;
}else{
print STDERR "Debe dar un nombre de archivo, y solo uno!\n";
}
while(<IN>){
chomp;
$cuenta{"$1"}++ if /\s*(\w+)/;
}
foreach $llave (keys %cuenta) {
print "$cuenta{$llave} $llave\n";
}