列 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 に置き換え、2 つの列を取得します。

ここで、列 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

関連情報