imprima una cantidad de líneas según la entrada en la columna 1

imprima una cantidad de líneas según la entrada en la columna 1

He estado intentando responder esta pregunta durante un par de días y no pude buscar en Google nada útil para mi problema. Soy bastante nuevo en esto, quizás por eso. Estaría muy agradecido si hubiera alguien aquí que pudiera indicarme la dirección correcta.

Tengo un archivo .txt simple con entradas que se ve así:

locus_1:36
locus_1:38
locus_1:41
locus_1:50
locus_1:65
locus_1:66
locus_1:196
locus_2:9
locus_2:36
locus_2:60
locus_2:77
locus_2:89
locus_2:92
locus_2:137
locus_2:160
locus_2:172
locus_2:190
locus_2:203

locus_3:20
locus_3:60

Utilizo sed para reemplazar : con \t para obtener dos columnas.

Ahora me gustaría crear un archivo con sólo las primeras 3 líneas para cada entrada en la columna 1, es decir, algo como esto:

locus_1 36
locus_1 38
locus_1 41
locus_2 9
locus_2 36
locus_2 60
locus_3 20
locus_3 60

¿Algunas ideas?

Respuesta1

Usando AWK:

awk 'count[$1]++ < 3'

Puede especificar el separador de campos para evitar el paso de conversión:

awk -F: 'count[$1]++ < 3'

Respuesta2

Precisamentecon awkexpresión:

awk -F"[_:]" '$0 && a[$2]++ < 3{ print $1"_"$2, $3 > "locus_groups" }' file

Resultados:

$ cat locus_groups
locus_1 36
locus_1 38
locus_1 41
locus_2 9
locus_2 36
locus_2 60
locus_3 20
locus_3 60

información relacionada