imprima um número de linhas com base na entrada na coluna 1

imprima um número de linhas com base na entrada na coluna 1

Estou tentando responder a essa pergunta há alguns dias e não consegui pesquisar no Google nada útil para o meu problema. Eu sou muito novo nisso, pode ser por isso. Eu ficaria muito grato se houvesse alguém aqui que pudesse me indicar a direção certa.

Eu tenho um arquivo .txt simples com entradas parecidas com estas:

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

Eu uso sed para substituir : por \t para obter duas colunas.

Agora eu gostaria de criar um arquivo com apenas as 3 primeiras linhas para cada entrada na coluna1, ou seja, algo assim:

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

Alguma ideia?

Responder1

Usando AWK:

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

Você pode especificar o separador de campos para evitar a etapa de conversão:

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

Responder2

Com precisãocom awkexpressão:

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

informação relacionada