数日間この質問に答えようとしましたが、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