我几天来一直试图回答这个问题,但无法在谷歌上搜索任何对我的问题有用的东西。我对此很陌生,这可能就是原因。如果有人能指出我正确的方向,我将不胜感激。
我有一个简单的 .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