3つの列のうち2つの列の情報に基づいて一意の行を保持します。

3つの列のうち2つの列の情報に基づいて一意の行を保持します。

次のようなファイルがあるとしましょう。

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をキーとして一緒に使用

関連情報