열 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로 대체하여 두 개의 열을 얻습니다.

이제 나는 column1의 각 항목에 대해 처음 3줄만 포함하는 파일을 만들고 싶습니다. 즉, 다음과 같습니다.

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

관련 정보