распечатать количество строк на основе записи в столбце 1

распечатать количество строк на основе записи в столбце 1

Я пытаюсь ответить на этот вопрос уже пару дней и не могу найти в Google ничего полезного для моей проблемы. Я совсем новичок в этом, может быть, поэтому. Я был бы очень благодарен, если бы здесь был кто-то, кто мог бы указать мне правильное направление.

У меня есть простой .txt-файл с записями, который выглядит следующим образом:

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

Я использую sed для замены : на \t, чтобы получить два столбца.

Теперь я хотел бы создать файл, содержащий только первые 3 строки для каждой записи в столбце 1, т.е. что-то вроде этого:

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

Есть идеи?

решение1

Использование AWK:

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

Вы можете указать разделитель полей, чтобы избежать этапа преобразования:

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

решение2

Точнос awkвыражением:

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

Полученные результаты:

$ 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

Связанный контент