重複行の削除

重複行の削除

次の行を含むファイルがあります(ファイルヘッダーのみ)。

    "chrom" "startA" "stopA" "genesA" "startB" "stopB" "genesB" "test"
    1 315121 317607 "gene2" 315521 317204 "gene3" 1684
    1 315521 317204 "gene3" 315121 317607 "gene2" 1684
    1 407644 408993 "gene4" 408421 409504 "gene5" 573
    1 407644 408993 "gene4" 408616 410013 "gene6" 378
    1 408421 409504 "gene5" 407644 408993 "gene4" 573
    1 408421 409504 "gene5" 408616 410013 "gene6" 889
    1 408616 410013 "gene6" 407644 408993 "gene4" 378
    1 408616 410013 "gene6" 408421 409504 "gene5" 889
    1 408616 410013 "gene6" 409682 411483 "gene7" 332
....

同じ行(同じ遺伝子のペア、開始位置と停止位置の順序だけが異なるだけで正確に同じ)があり、重複した行を削除する必要があります。たとえば、

1 315121 317607 "gene2" 315521 317204 "gene3" 1684
1 315521 317204 "gene3" 315121 317607 "gene2" 1684

同じです。遺伝子2と3の組み合わせですが、順序だけ違うだけですが、そのうちの1つを削除したいと思います。

これが私が望む結果です:

"chrom" "startA" "stopA" "genesA" "startB" "stopB" "genesB" "test"
    1 315121 317607 "gene2" 315521 317204 "gene3" 1684
    1 407644 408993 "gene4" 408421 409504 "gene5" 573
    1 407644 408993 "gene4" 408616 410013 "gene6" 378
    1 408421 409504 "gene5" 408616 410013 "gene6" 889
    1 408616 410013 "gene6" 409682 411483 "gene7" 332

私はこれを行う方法を知っていますか?ありがとう

ベストアンサー1

あなたは試すことができます:

awk '{key = $4 < $7 ? $4 SUBSEP $7 : $7 SUBSEP $4} !seen[key]++' file

重複履歴を削除するために必要な最小限のコンテンツを保存します。

!seen[key]++「キー」が最初に表示されたときにのみレコードを印刷する「有名な」awkイディオムです。

おすすめ記事