Найти разные строки между двумя файлами без сортировки

Найти разные строки между двумя файлами без сортировки

У меня есть два файла, file1 является подмножеством file2, что означает, что все строки в file1 можно найти в file2, но некоторые строки в file2 отсутствуют в file1. Теперь я хочу найти разные строки (или дополнительные строки) между двумя файлами. Из-за содержимого (содержит длинные последовательности РНК) файла сортировка файла не очень целесообразна, поэтому мне интересно, смогу ли я найти дополнительные или разные строки между двумя файлами без сортировки.

Я попробовал эту команду, но, похоже, она не работает:

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

Ниже представлен фрагмент файла file1 (состоящий из 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

Ниже представлен фрагмент файла file2 (состоящий из 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

Сортировать эти два файла не представляется возможным. Поэтому, какая команда будет для задания без сортировки?

решение1

Эта одна строка должна решить задачу, и она позаботится о том, чтобы выходной файл не был отсортирован:

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

По сути, он делает следующее:

  • Объединяет файлы.
  • Удаляет дубликаты.
  • Выводит данные в нужный файл, который не будет отсортирован.

решение2

Вместо grep можно заменитькомм?Учебникиможет бытьполезный, но вот вам однострочник, который сделает то, что вам нужно:

comm -3 bigfile smallfile > differences

Связанный контент