ソートせずに2つのファイル間の異なる行を見つける

ソートせずに2つのファイル間の異なる行を見つける

2 つのファイルがあり、file1 は file2 のサブセットです。つまり、file1 のすべての行は file2 にありますが、file2 の一部の行は file1 にありません。ここで、2 つのファイル間で異なる行 (または余分な行) を見つけたいと考えています。ファイルの内容 (長い RNA 配列を含む) のため、ファイルを並べ替えるのはあまり現実的ではないため、並べ替えずに 2 つのファイル間で余分な行または異なる行を見つけることができるかどうか疑問に思っています。

このコマンドを試しましたが、機能していないようです:

    grep -vxFf barcodes1.tsv barcodes.tsv > diff.csv

以下はファイル1の一部です(6113行あります)。

AAACCTGAGAAAGTGG-1
AAACCTGAGCCACGCT-1
AAACCTGAGCCTATGT-1
AAACCTGAGCTGCAAG-1
AAACCTGCATTCGACA-1
AAACCTGCATTGGGCC-1
AAACCTGCATTTCACT-1
AAACCTGGTAACGTTC-1
AAACCTGGTATTCGTG-1
AAACCTGGTCGGCACT-1
AAACCTGTCACTATTC-1
AAACCTGTCAGGCGAA-1
AAACCTGTCCTAGTGA-1
AAACCTGTCGGATGTT-1
AAACCTGTCTGATTCT-1
AAACGGGAGTGAACAT-1
AAACGGGCACTCTGTC-1
AAACGGGGTAAGAGAG-1
AAACGGGGTACCTACA-1
AAACGGGGTTCAGACT-1
AAACGGGGTTTGACTG-1
AAACGGGTCAAAGTAG-1
AAACGGGTCAACCAAC-1
AAACGGGTCATGCATG-1
AAACGGGTCCTATTCA-1
AAACGGGTCGTATCAG-1
AAACGGGTCTATGTGG-1
AAAGATGAGCACAGGT-1
AAAGATGAGCAGGCTA-1
AAAGATGCAAACTGTC-1

以下はファイル2の一部です(6121行あります)。

AAACCTGCAAGCGAGT-1
AAACCTGCACACAGAG-1
AAACCTGGTAAACACA-1
AAACCTGGTCGGATCC-1
AAACCTGGTCTCTTTA-1
AAACCTGGTTTAAGCC-1
AAACCTGTCAACACCA-1
AAACCTGTCTATCCCG-1
AAACCTGTCTTTAGGG-1
AAACGGGAGCCACCTG-1
AAACGGGAGCGTTTAC-1
AAACGGGAGCTGTTCA-1
AAACGGGAGTAGGCCA-1
AAACGGGAGTGCCATT-1
AAACGGGCAACACCTA-1
AAACGGGCAATAGCGG-1
AAACGGGCACAGATTC-1
AAACGGGCACAGTCGC-1
AAACGGGCAGATGAGC-1
AAACGGGCAGGAATCG-1
AAACGGGCAGGTCCAC-1
AAACGGGCAGGTGGAT-1
AAACGGGCATAAAGGT-1
AAACGGGGTAGCTCCG-1
AAACGGGGTAGCTGCC-1
AAACGGGGTTCAACCA-1
AAACGGGGTTTGGGCC-1
AAACGGGTCAAACAAG-1
AAACGGGTCGAACTGT-1
AAACGGGTCTTAACCT-1

これら 2 つのファイルを並べ替えることは現実的ではありません。したがって、並べ替えを行わないジョブに対するコマンドは何でしょうか?

答え1

この 1 行で目的を達成できるはずです。また、出力ファイルがソートされないよう注意します。

cat -n barcodes1.tsv barcodes.tsv | sort -uk2 | sort -nk1 | cut -f2- > diff.csv

基本的に、次のようになります。

  • ファイルを連結します。
  • 重複を削除します。
  • ソートされない目的のファイルに出力します。

答え2

grepの代わりに、通信?チュートリアル多分役立つただし、必要なことを実行するには、次の 1 行で済みます。

comm -3 bigfile smallfile > differences

関連情報