根據第 1 列中的條目列印多行

根據第 1 列中的條目列印多行

我幾天來一直試圖回答這個問題,但無法在谷歌上搜尋任何對我的問題有用的東西。我對此很陌生,這可能就是原因。如果有人能指出我正確的方向,我將不勝感激。

我有一個簡單的 .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 以獲得兩列。

現在我想建立一個文件,其中第 1 列中的每個條目僅包含前 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

相關內容