This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How to compare lines in to files?

I have two tab delimited large files containing two columns, IDs and seqs. I am looking to generate output file of mismatch lines which are not available in each other files.

Please see the example below:

File 1:

0   AAAAGTGTGTAAAGAAGGGTAAAAAAAAAAACCGGATGCGAGGCATCCGGT
1000004 TACCGGGGAGTCGCCTTTTGCAACAGCACGGCTCAG
1000001 TGGTCAGTTTATGGAACGTTACCGGGGAGTTACTTTTTGCAACAGCACGGCTCAGCGC
1000002 ACCGGGGCAACAGCACTGCGACCGCTAAAAAAG
1000003 ATCACCGGGGCAGGCATTCGCCAGCGCCAGTAGCTGG

File 2:

1000000 TTTTTACCGGGGAGTCGCCTTTTGCAACAGCGGACGGCTCAG
1000008 TACCGGGGAGTCGCCTTTTGCAACAGCACGGCTCAG
1000006 TGGTCAGTTTATGGAACGTTACCGGGGAGTTACTTTTTGCAACAGCACGGCTCAGCGC
1000005 ACCGGGGCAACAGCACTGCGACCGCTAAAAAAG
1000009 ATCACCGGGGCAGGCATTCGCCAGCGCCAGTAGCTGG

OUTPUT:

0   AAAAGTGTGTAAAGAAGGGTAAAAAAAAAAACCGGATGCGAGGCATCCGGT
1000000 TTTTTACCGGGGAGTCGCCTTTTGCAACAGCGGACGGCTCAG
alignment genome

I don't follow: the description of the problem states you want to find lines that are different between the files, correct? However, there are no lines in common between the two example files, so all lines should be included in the output. Or did I get something wrong?

I updated my query. I am looking to generate a file of different lines between files.

Many possibilities with AWK or GREP, see here for same example and solutions.

1 answer

$ join -t ' ' -1 2 -2 2 -v 1 -v2  \
     <(tr "\t" " " < file1.txt | tr -s " " | sort -t ' ' -k2,2) \
     <(tr "\t" " " < file2.txt | tr -s " " | sort -t ' ' -k2,2)

AAAAGTGTGTAAAGAAGGGTAAAAAAAAAAACCGGATGCGAGGCATCCGGT 0
TTTTTACCGGGGAGTCGCCTTTTGCAACAGCGGACGGCTCAG 1000000

Log in to answer this question.