次のようなファイルがあるとしましょう。
NW_006521251.1 428 84134
NW_006521251.1 511 84135
NW_006521038.1 202 84155
NW_006521038.1 1743 84153
NW_006521038.1 1743 84154
NW_006520495.1 198 84159
NW_006520086.1 473 84178
NW_006520086.1 511 84180
列1と2に基づいて一意の行を維持したいと思います(つまり、最初の列の別のラベルの下で数字が繰り返される可能性があるため、2番目の列だけでなく)。
この出力を取得できるように(NW_006521038.1 1743
リストから2番目のレプリカを削除する):
NW_006521251.1 428 84134
NW_006521251.1 511 84135
NW_006521038.1 202 84155
NW_006521038.1 1743 84153
NW_006520495.1 198 84159
NW_006520086.1 473 84178
NW_006520086.1 511 84180
awkを使ってこれを行う方法はありますか?書けないuniq file
。
答え1
この問題を解決するために設計された「有名な」awkイディオムがあります。あなたがしたいこと:
awk '!seen[$1,$2]++' file
これにより、2列のキーを使用して「表示された」連想配列が生成されます。キーが最初に見つかったときに値がゼロになるように、ポストインクリメント演算子を使用してください。キーを初めて表示したときに「真」の結果を得るには、否定演算子を使用してください。
答え2
出力がソートされるのが気に入らない場合は、次のようにします。
sort -u -k1,2 file
-u
- ユニーク-k1,2
- フィールド1と2をキーとして一緒に使用