Finden Sie die unterschiedlichen Zeilen zwischen zwei Dateien ohne zu sortieren

Finden Sie die unterschiedlichen Zeilen zwischen zwei Dateien ohne zu sortieren

Ich habe zwei Dateien, Datei1 ist eine Teilmenge von Datei2, was bedeutet, dass alle Zeilen in Datei1 in Datei2 zu finden sind, aber einige Zeilen in Datei2 nicht in Datei1. Jetzt möchte ich die unterschiedlichen Zeilen (oder zusätzlichen Zeilen) zwischen zwei Dateien finden. Aufgrund des Inhalts (enthält lange RNA-Sequenzen) der Datei ist es nicht sehr praktikabel, die Datei zu sortieren, daher frage ich mich, ob ich die zusätzlichen oder unterschiedlichen Zeilen zwischen zwei Dateien finden kann, ohne zu sortieren.

Ich habe diesen Befehl ausprobiert, aber er scheint nicht zu funktionieren:

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

Unten sehen Sie einen Abschnitt von Datei1 (mit 6113 Zeilen):

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

Unten sehen Sie einen Abschnitt von Datei2 (mit 6121 Zeilen):

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

Es ist nicht möglich, diese beiden Dateien zu sortieren. Wie lautet also der Befehl für den Job ohne Sortieren?

Antwort1

Dieser Einzeiler sollte es richten und dafür sorgen, dass die Ausgabedatei nicht sortiert wird:

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

Im Wesentlichen bewirkt es Folgendes:

  • Verkettet die Datei.
  • Entfernt die Duplikate.
  • Gibt die gewünschten Daten in einer Datei aus, die nicht sortiert wird.

Antwort2

Anstelle von grep kann ich ersetzen durchKomm?AnleitungenVielleichthilfreich, aber hier ist eine Einzeiler-Anleitung, mit der Sie tun können, was Sie möchten:

comm -3 bigfile smallfile > differences

verwandte Informationen