I was trying to scan with positions from one file through positions in second file to find, if the features are overlaping between them.
I have a file Pt looking like this:
chr10 0 60985
chr10 60988 60990
chr1 165014865 165014867
chr1 1161693 1161695
chr1 158851689 158851689
chr10 64766 64767
chr10 63600 64703
chr11 647696 647697
And file a (it has of course many many lines like the one below):
chr1 1161693 chr1uGROUPERuDELu0u832 TGCTCTTTCCAGAAACCCTCAACCCTGTACGGTCAGGAGGAAACATGGCACCTCCCCTCTGGGG T 63 NormalSupport;MinSampleCount;LowSomaticScore CLUSTER_NUM=5454;CONTIG=GGTGCAGGGAAGCAGGAAGGAAGTGAAGCTCAAAAGCCCCTAGGACAGGGCACCTCCCCTCTGGATGCTCTTTCCAGAAACCCTCAACCTTGTACGGTCAGGAGAAAACACATCCCACAAG;CONTIG_NUM=5840;DOWNSTREAM=GCTCTTTCCAGAAACCCTCAACCCTGTACGGTCAGGAGAAAACACATCCCACAAG;END=1161756;NS=1;READSOURCES=(0:3:0,1:2:13);SOMATICSCORE=19;SVLEN=-63;SVTYPE=DEL;UPSTREAM=GGTGCAGGGAAGCGGGAAGGAAGTGAAGCTCAAAAGCCCCTAGGACAGGGCACCTCCCCTCTGGAT;ensembl_gene_id=ENSG00000078808 GT:GQ 1/.:.
chr1 158851689 chr1uGROUPERuDELu3u4452 GGGGAGTAATTCTTATTCATGATATGAAAACTCTAATGTGTTTCTTATTCCAGAAAA G 100 NormalSupport CLUSTER_NUM=25182;CONTIG=CATATTTTGCTATATCTCACATCATTGTTCATCTGATAATATATGAAAACTACAATGTGTTTCTTATTCCAGAAAGGGGAGTAATTCTTATTCATGAATAAACACTGAAGGAGAAAGATTATGGATCATAGTGGGAAAAGCCACAATACCATCTACATTC;CONTIG_NUM=24300;DOWNSTREAM=GGGAGTAATTCTTATTCATGAATAAACACTGACGGAGAAAGATTATGGATCATAGTGGGAAAAGCCACAATACCATCTACATTC;END=158851745;NS=1;READSOURCES=(0:11:0,1:3:18);SOMATICSCORE=55;SVLEN=-56;SVTYPE=DEL;UPSTREAM=CATATTTTGCTATATCTCACATCATTGTTCATCTGATAATATATGAAAACTCCAATGTGTTTCTTATTCCAGAAAG;ensembl_gene_id=ENSG00000229849 GT:GQ 1/.:.
chr1 165014865 chr1uGROUPERuDELu3u7344 ACTGGCATTAGCTATGCTTCCTTAGGCAGACAGCATGTTGAGAAATTCACATTCATCAG A 100 NormalSupport CLUSTER_NUM=40249;CONTIG=CTCCAGTAAAGAGCATCTTTTAATGAAGTGTATCTGCCTGGGCTAGAAAGGCAGCTGCCTCCACTAAAGCAGGGCTGGTCCAGAAATATTACCACTTGCCTAATCCTTATAGTAATCCTAACTGGCAGGTATTATTATATCCCAATTCACACACTTAGAGG;CONTIG_NUM=38845;DOWNSTREAM=CTTGCCTAATCCTTATAGTAATCCTAACTGGCAGGTATTATTATATCCCAATTCACACACTTAGAGG;END=165014923;NS=1;READSOURCES=(0:32:0,1:9:18);SOMATICSCORE=60;SVLEN=-58;SVTYPE=DEL;UPSTREAM=CTCCAGTAAAGAGCATCTTTTAATGAAGTGTATCTGCCTGGGCTAGAAAGGCAGCTGCCTCCACTAAAGCAGGGCTGGTCCAGAAATATTACCA GT:GQ 1/.:.
chr1 176569763 chr1uGROUPERuDELu3u12313 GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAAAAAAAAAAAAAAAAAA G 100 NormalSupport;LowSomaticScore CLUSTER_NUM=65333;CONTIG=GCGTGGTAGCGGGCGCCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCCGAGATCACAGAGCTCAAGCTCACAATTCCATTATACTGTTACTC;CONTIG_NUM=62936;DOWNSTREAM=ATCACAGAGCTCAAGCTCACAATTCCATTATACTGTTACTC;END=176569833;NS=1;READSOURCES=(0:14:0,1:8:7);SOMATICSCORE=22;SVLEN=-70;SVTYPE=DEL;UPSTREAM=GCGTGGTAGCGGGCGCCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGCGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCCGAG;ensembl_gene_id=ENSG00000116183 GT:GQ 1/.:.
chr1 184683773 chr1uGROUPERuDELu3u15990 TAACAGTTTGGATGAAAAAAATGTAAGGTATGCTCATCTAAACTATAGATCATTGAAAACTGGTAGTTTAGCTAATGAGATTCAACCTCTAGACCAAAATCTAGAAACAAAACAAAAAAAGAAATTTTGCTGAGTTAAATATAAAAGTTCTAAGTTTACACTAAAAAAAAGAA T 93 PASS CLUSTER_NUM=82731;CONTIG=TAAACCACCACATGCAAAGAGCCTGTAACTGAAAGCTCTTGAGTGCAGTGCCACAAGGCACTGGTTGGGGTCCAACCAAAACTTCTTCCTAACTTGGCTGCTCAAAGGCAGGGTGGAGAACACTCATTTGTCAGCAGACCATAC;CONTIG_NUM=79822;DOWNSTREAM=AACTTGGCTGCTCAAAGGCAGGGTGGAGAACACTCATTTGTCAGCAGACCATAC;END=184683945;NS=1;READSOURCES=(0:12:46,1:0:44);SOMATICSCORE=30;SVLEN=-172;SVTYPE=DEL;UPSTREAM=TAAACCACCACATGCAAAGAGCCTGTAACTGAAAGCTCTTGAGTGCAGTGCCACAAGGCACTGGTTGGGGTCCAACCAAAACTTCTTCCT;ensembl_gene_id=ENSG00000116406 GT:GQ 1/.:.
chr1 193557238 chr1uGROUPERuDELu3u20250 TGTGTGTATACACACACACACATATATGTGTGTATACACACACACACATATATATATGTGTGTATACACACACACACATATATATGTGTGTATACACACAC T 100 NormalSupport CLUSTER_NUM=103112;CONTIG=TTTAAAATAAGGGGGGAAATTTATATATATATATATATATATATGTGTGTGTGTATACACACACACATATATATATATACACACACACATATATATATATATACACATACACACACACACACACACACACACACACACACACTGTTTGAAATA;CONTIG_NUM=99338;DOWNSTREAM=ACATATATATATATGTGTGTATACACACACACATATATATATATACACACACACATATATATATATACACATACACACACACACACACACACACACACACACACACACTGTTTGAAATA;END=193557338;NS=1;READSOURCES=(0:23:0,1:3:26);SOMATICSCORE=60;SVLEN=-100;SVTYPE=DEL;UPSTREAM=TTTAAAATAAGGGGGGAAATTTATATATATATAT GT:GQ 1/.:.
chr1 211021468 chr1uGROUPERuDELu4u5565 ACAAGCTGTTGGGTTATCTCTTTATGATCTTCAACTACACTAAGAAGTGTGTCAATTGTATTCAGAATTCCCATAGCAGTAACTGCTTTGTCATCACTACCTTCTTCATCTGGCCCTGTCTGGATTACTTGGCTAAATGTCATTGCCAACTGTTGTGTCATTTCTACTGCAATAGGAGTAACTTCTTCACTATTTTCACAGATCATTTTCTGAATTACATTGGTAAGGTCATCATTTTCTGTTTCTGTTATAATATGAAGAAGAGCCTGCATTACAGGTCTGATAAATGCTGTGATACATTCTTTAGATTTTTCTTGATTGCTGATAAATACTTGAAGGACAATGGCAGCTTCCACTTTCACAGGCATGTCTCTGTCATCAATCAGACATCTTCTTGTTAGCTCTAAAGCTGTTTGAATGTTCTGATCACTTTTGAACTTTACTTCACAAAAATAGTGAAGTACTCAGCAAGCCCTTGCTCTCATGTAGCCTAGTTCACTGCTGAAGAGAGAGAACACATGATTCTGCAACATGTATTCCATCTGATCATTACAGATCTTTTTCTTCAGAAGTGTTTCAGCTAAAGAGCCAATCATGCAGGGCTCCATCTTTTTTTCAAAGGTCAGCATTGGGTTCTGTAAGAATCTGGTAACAAAATCCCATAGTCTTTTGAAGTACCTCCTTCCTCTTACTATGGGCTGTAAACAAAAGCTTCTGGGCAGCAGTGGCAAAGGAAATGAAATCTTCAGACACATCAAACTTCATGCGTATATACTCGTAAGGGTCTTCTTCCCAAAGTTCCTCATCAGCATCTGTATAACACATCAATGGAAAAATAACATCTTGGATAATGCCTTGTATATGGGGCTTCAGATTCTTCCAGGTGAGAGCATGAGAAACTCCTTGATTAATAGAATTTAATGTCTGTTGTAAAACTTGAGGAGCCATATATTGCTTCTCGTTGTACTGTTATAACACTTTCAATAAAACTTGCTGGACACCAACAACAAATTCCTTCAGAAATACTTGAGCAAATTCATTATACTCCTAGGAAACACTGCCAGAGCTTCCATATCTTTCAAAAAGTCTTGCTAAAATATGTAAGGCCCACTTCTTGCATTTCCATTATGATAACTCAGGTCGGTCATCTTCTTCAATTCGAAGTGTTTCAGTCTTTAAAATTTCTACCCATTCTGTCAGGTTCTGTTGGTTTATCAGTTCCAGTGGTATAGAGTATAGAGTATATACTGAACAAGAGCATAGAGTATATACTGAACAAGATCATAGAAGATCTTGAATATTTGTTTCTGGATGACGACAGACTGATCAGACTGGTCAGAAAGAAGCTGGATAAAATGATCCTTTAGAACTGACAGAAAATGCTGCATTGCTGCTACCAATGGACTCCACTCCTCTAGTTTTTTATACTCATAAGTTTTCACAAGCTGATAAAGGCAAATAATTCCTATCCAACAAGCACTGTTATCACACTGAAGATAAAAGCCAGTTTTGTCCACAATGGCAGTCCAGCAGCTTGGATAATCACGTTTGGTGATGTGATGAATGCATGTAGTAAGCTGTACCCTGATGAGCTCAGGAGGATGGATAATGGCTTCTACAATATTTTCTCAAATACAATGGCAATCTTCTTCTGGAATAGTATAAGGGGATATATACTTTTGTGCTGTTTCTTGACCAGGCCAATACTGTGTTATATTTTTCAAATAGATAACACCTGCCTGTCTCACAGGTAAATCCAGCTGTTCCGACATAGTAATCTGGAGCAGCGTTGAGACAAAATTCAGAGATTTGTGTGCTTCATTGAGCTGGCGCTCCATGGCCTCTTGCAGGGCTGGGTCCATGGTGCCCCGCAGGGCCTCGATAATGGTGTTGGGGTCCATTGCAGCATGAACTAGGTCAAACCCAGGGCTTGAGTGCTACTGGGCCAGGAATAGCACTACTCACTGCACACATGGACCTGCCGCAGCGGCAACTGGCGCAAAAGGGCAATGGTGCAATCTTAACTCACTGTAACCTTGAACTCCTGGGCTCAAGTGATCCTCCCACCTCAGCCTCCCAAGTAGCTGGGACTGCAGGCTCACGCTACCATGCCAAGCTGATTTTGTGTTGTTGTAGAGATAGGGTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTGGTCTTAAGCAATCATCCTGCATCAGCCTCCCAAAGTGCTGGATTTACAAGCCTGAGTCACCATGCCTGGCCAATATTTTCAATAGTTAGAGGCAGGATTGAAAAACAATTCCTTTTTGCTTTGCTCAAAATAAGTATTTATGAGCATCCACTTACGAGTTACTGTGCTAGATGCTGGACATACAAATAGAAATAAGACCCAGTTACTGCTGTTGTGGAAAGGGCAACATTAGAGAAATGTTCAGGAAATGGAGGAAAGGCCCTTATCTCAGCTTAAGGAAGCCTTAACTCACTATTGTTTGGCTGAATCTCAAAAATGTACAAACCAATAGGAGTGTCCCCTTCTTCCCTACAGATTCCCTGAAGCCAGTGGGCTGTCTGGCAGGAAAACCAAATACTAACTGTGATTTGCCCATTCTAGAAGGTAAGAGAAGGGATTCAGGGCATGCGTGTAAAGTTAGGCTTTGATGACTTGTGTTAGAAGGTTCAGGAAGAAAGCCGCATCACTTATCCCCTATGGAAAAAAAGGAATGGCCAAGAGAACTTCCTTGAATCCATGAAGAGCTTCCAAAAAGAGAAATTTTAAGTTTAGGGATGATAAGGAGCAGAAAGGCTTGGTCTGCTTTACCTGGTGAGCCTATCAATGCACCCACCAAGCACATGCTTGTTACCCAGCAGAGTGTTGGGCACTAGGGGGTGGAGGAGGATAGAATCTAAGATTACTTTTAGCTCTGAAAATCTCAAGACCATCTAAGTTAGGCTCTTCATTTTACAAAAGACAAAGTGCAGACCCAGAAAAGGCCTTATCCAAAATCACATTACTAGCTCTTGAGTACAAGATTACTAGCAGGCTGCAATCTGGGAAGATGGCTGAAGTGGACTTGACATCATATTAAACTCCAGCATCAGTACTTTGGGCAACATGTAGTCACCAGAGGTCTCTGAGCTGGTGACCAGCTTAGTTAAAACCACTTTCCCCCTTGATAATAGTAAATGCCATTTCCAGTTAAGTTACAGATGACAGATTTTATGGAATGTTTCCACCTTAATGTGCGAGATCTGAATGGTACCTCCATCACTGACATTACATTTTGTTTCTCAACCCTCCTCTTCACAGCTCTTATTAGGAAATCGGGGAAAGTCAGGTGCTGAGGCCCAAAGGAGCTGTGCCTTGCTGGTGTTCCCTCATGAAAGGCTGCAGCCAGAACTGTGTCCTTCCTTCTCAATGCAGGTCTCTATGCTAAACTTGTTCACCCTCTGTTCCAGAGCTTTAGGTGCTCCACACGAAGTACTCTTGAACTCTGTCAACCCTGACCTCTCCCCTGTCATGTAGAAAGGCCTCAAGTGGTAGTTTTTGGAGCTCCCGATCATACAAGCACATGCACCCTTCTCAGGAGAGGGCAATTAGGAAACCTGCTGCTAACTAGAGGTGCCATGGCAGGTGCCAACTGGATCAGTGCAGGATGGAACAGCACATTCCAGACAGCCTCATGAGTTCATTGCTAAGGGTAGAGCTAATTTACAGGAAACATGCAGAGGGTTTGACTGGATCCCCTCTGATACCAGCTGAGCCCAGCTCTCACATGCCTATGGCATGGAGTGGATGGTGCTGGGGCAGGCTTCTCTCAGCCTGACAGCAGAGTAGCTGTCTCCACTATTGAGCCAGGTGTGACCCCAGAATGCCATCTCTACCCCCTCAGCATGGTAGCAATGCCACGGCAGTGAGGATGTGGGGAATGAGGAGCAGCTTAGGAGAGACTAAGGCATTGCAGGACTGAGGTCCACTATGCAGCTCCAGGTCCCCCTACTATGCTCCTTCAAGAACAGTGTTGGTAGTAAGAGATTATCACCAAGTTCCTCTCAACTCAGCAAAACAAGTGGGGAAGCGAGAAAACAAAGGAGGAGGAAGATAGCTTCCTGTGCTGTGAGGACTAATTGCAAGCAAAATATGTGTCAGCTGCCACTGCTCACAGTAAACACTCAACGGATGGTAACCCTAAGGGTTTGGGCTGCAGCTTTAGTGCCCAAATCCTACCTCTATGGAGGGAGTGAGACACTTGGACAACAACAATCAAGGCAGGTGGAGAAAATTCTGGTTTTGCTTGTCCCAAAACAAATCACCTCACCCATAGCAGTGTAAGACAACTAGCATTTTACTATGTTCACAGATTCTGAGCACGAGAAATTTAGAAAAGGCCCAGCAGGATGGCTTGTCTCTCTTTCTTATACCTGGAGCCTCAGCCGGAAAGATTCAAAGACTGGGATGACTTAGTTGGAATCATCTATGAGCCAGTTCATTCACATAACTGGTGGTTGACCCATGCTGTCAGCTAGAACCTGAAGCTGTAAGCTGGAACACCTATACATGGCCCTTCCATGTGGCTCTTTGAATTTCTTTACAGAATGGTAGCTGGGTTCTAAGAGCAGGTGTCCCAAACAAATCACACAGAATCTGTATGACCTTTGATGACTTAGCCTATCACTATAATGTGACTTCTGCCATAGCCACAAGGCTTTCCAGGTTCAAGGGTAGAGAACAAGTATCAAAGGCAAATTTTTAGAAGAACATGTGGAATGGAAGGTAATGTTAAAGCTATCTCTGGAATATACAATCTGCTTCATTTGTCAAGCTAAACATATGCCCCCATAGTCTCCCAATGCAGAGATATTATGTACAATGTCTGGAACAAATATTTTCATATGACAGCTCATTAATTCAGTCCTTACAATAATACTGCAAGGTAATTTATTATTACTCCACGTTTTACCTGAAACTGAGCTCAAAAAGTTTAGATAACTTGACCAAGGTCATATAGTTTTTAAGCACCAAAGCAGTATCAAATCCAGATCTAAATCTGTTAACTACTTGTTAAAACTCAAAGCTCATAGTCTTTAGAGAACATTTTGGGTCAAACTAAATGATCTTGGTTCTAGGGCAGTAGGAATAAGGTAGCAAAGAAAAAAAAAAGGCAGCTGTTCATTTGATGCCTAAATGTTCACAGTGTACACACAATGCTGAAGCTACGCTTTGTAACTCTTAAGTGTTATTTCTTTTGCTAATAAATGCATTTTATGTAAGGAAAGACTTTGAAAAACAGTATCTCCAGATAGAATGGAAGCTGGGCCACCTTGCTAGGCTCTCCTACACCCCAATCGCATTTTCCAAAGTAGGGAGAAAGGTACAGTTCAGAACCTCTGTTTTTCAAACTGGAATAAGGCCTCTCTCTTACTTTTCCCCCAACTCTTTAAGACAGACAGTTTTTATTTTGAAACTTGGCCTAGATTGTGGGGCAAAGCACAACCAAATGAAATGGGTGAATTCCCATTTTGATCCTTATTGTCATTCTCCATCTCAGGTAGCTGATGGATCCAGGCTAAATGTGGGTCAAAAAGTATGTTATAGATCAGCTTTAGTTGAAAAAAAATGTGTATACACCAATACAACTCAATGGGGGAATAAAAACTTTTTCAACAAATAGTGTTAAGACAACTGGATATCTGCATGCAAGTGAATGAAGTTGGACCCCTACCTCACACCATACACAAAATTTAACTCAAAATGGATGATAGTCTTAATTGTAAGAACTAATGCTCTAAAACTCTTAGATGAAAATATAGGGGCAAATCTTTATGACCCTGAGTTAGGCAAAGCCTTTTTAATTGTGACACCAAAAGTACAGTCTACAGAAGAAAACTAGAAAAAATGGACTATATGAAAACCTAAACTTTTGTACTGCAAAAGATACCATCAAGCTAGTAAAAAATGCAACCCACAGACTCGCAGAAAATATTTGCAAATAAAATACCTTATAAGAGATTTGTATCCAGAATATATTACAAAAAACTCATAACTCAATAGTGAAAAAATAACCCAATTAAAAATAGGCAAAGAATCTAAATAGACATTTCTCCAAAGAAGATATAGAAATGGCCAATAAGCACATGAAAAGATGTTCAACATCCCTAGTCATACGGGAAATGCAAATCAAAATCACAATGAGACATCACTTTACACCCATTAAAATGGCCATAATCAAAACGACAAGTGTTGGTGATGATGTAGAGACATTAGAACACTGAAATTGTTGGAAGAATGTAAAGTGGTGCAGATGCTTTGGAAAACAGTTTAGCAGTTCCTCAAGATGTTAAATGTGGAGTTACCAGATGACTCAGCAATTCCACTCCTAAGTCTATACCCAAAAAAGGCAGAAACAAATGTCCATATGAAAACTTGTACATGAATGCTCATAATGTTCATAGGAACATTGTTCATAATGGCCAAAAATGTGAAAACAGCCCATATACCCATCAACTGATGAACAGATGAATTAGATGTGGTATAGCCATACAATAAATTATTATTCAGTAATAAAAAGGAATGAAATACTGATAAATGCTACAAAATATTAGAACCTTGAAAATGTTATTCCAAGTGAAATAAGCCAGTCACAAAAGACCACATATTGTACAATTCAATTTATATGAAGTGTCCAGAACAGGTAAATCTACATTTAGAGAAAGTAGATTAGTGGCTGCCTAGGGCTAGGAAATGTGAGGAGAAATGGAAAGTGACTGAAAATGGGTATGGGGTTTCTTTTGGGAGTTATGAAAATGTTCTGAAATTGATAGTGGTGATGGTTGCACAACTCAATAATATACTTAAAACTATTGAATTGTACATTTTAATTATGCAAATTGTATGGTAGGTGAGTTTTATTTCAATATTTATATCCACACACACCTACACATAGAATTATATGTATATGTTTACACACACACACACACACACACACACACACACATATATATATATATATGTGTCCAAAGCAAATTCATATTAAAGTGGGGGCAATGTCAAGTATAGAAAACCACCCACAGATACTCCTCTGCTTTAGCCTAACATGTGGCTGTGTGACCAAAGGTACTGTGAAAAGCAATTAGATGGTGTTTTCTGAAAAAAAATTTTATTGAGGTATAATTTACATGTGACAAAGTACTCCCATTTCAGTTCATAGTTTGATGTGTTTTCACAAATGTGACCACCATATAACCAACACATTCAAGATACAGAATATTTTTATTACCCCAAAAAGTCCCTTGTGCCCCTCTGTCTCAAAATGCCCAACCCTAGGCAACAATTGATCTACTTTATGTCATTTTAAGTAAGTTTTGCCCTTTTCTATAATTCCAGATAAATTAAATCCTACAGCATGTACTATTTGGGACCTGGACTTTTTTATAACTCAGGATAATATATTTGAGATTCAACCATGTGTCATGCATATCTCTAATACATTGCTTTTTTATTGCTGAGAGTATTCCCTTATATAAATAGACTAAAGTTTGTTTTGCACTCATCTGCTTAAGGACATTTGATATTTTTCCCTCATTTTAGTTATTATGAACACTGATATACAAGTTTTTGTGTGAACATATGTTTTCACTGCTCTTTGGTAAATGAACAGAAGTGGAAACACTAGGTCTTATAAGTGTATGCCTAACTTTATAAGAAACTGCCAACCTGATTTCCAAAATGTTAATACTATTCTACATACCCACAAGCAATATATGTAAGTCTTTTTAATTGTATTCATATAGTGGGTATCTCATGTAGTTTTCAATTGCCTTTCCTTGATGACTAATTAAATGGAACATCTTTTCATGTGCCTTTGGCCATTCATGTGTGCGTGTAAAGTGTCTGTCCAAATCTTTTGCCTATTTAAAAAATTTATTTTTAATTGAGTTGTATAAGTTTTTTTTAATACATTCTGGATTCAAACCTTTATCAGCTTAGTCTGTGGCTAAAAATTTCATTTTCTTAATGGTGTCTTTCTTAATAGTGCCTTTGATAAAGTCTAATGTATAATTTTTTCTTTTATGTTTCAAATGTTTTGTGTCGTAAGAAATCTTCGCATATGCCAATGTTGAAAAACTTCTAGTTTTACAGTTTTAATTTTTATGTTTCAGTATACTACCTATTTCAAGTTAATTTTTGAGTCTACAGTAAAGGGTTGAAGTTCATTTTTTGTATATGAATATCCAATTTTGTAGAACCATTTGTTGAAAGCCTATTTCCCCACTAAAATATCTTCTTAACAACATTTAATCACAAGATTCTTCATTTCCCTTTTATAGTCACACCCACTTCCTTCCAACTTTCCTTTAATCCTCTTCTCATTAACTCCTACCAACCACTAATCTGTTTTCCCTTTCTATAATTTGGTCATTTCAAGAATATTGACTATATGGAATCATAAAGTATATAACCTTTTGGGATTTGCTGTTTATTCTTTGCATTTATCCATGTATGATGTTTTTCCTTCATTTGTATAGATCTAAATTTCATTGATAGTATTTGCCTTGCATCTGAAGAACTTGCATTTTAAGTCAGCTGGTGAATAATTCTGTCAGCTTTTGTTTGCCTGAAAAAGTTTTTATTTCATATTTATTTTTGAATGGTATTTTTATTGGATATAGAATTCTAGGTTGACAGTTTGCTGTTTTTGTTACAGCTCTTTAAAGACGTCATGTCATTTTCTTCTGATTTAAAAGTTTCTGACAAGACATATGTGAGTATTGTTATCTTTGTTCCTCTGTATGTAATTTTTTTGTCAGCTCTTAAAATTTTCTCTTTATCAATTTTGTTCAGTAATTTGATCATGAACTCCTTTGGTGTGATTTTATTTTGTGTTTATCCTTCTTGGAGTTGTTGACCTGCTTGGATCTATGAGTTTATAATTTTCATAAAATATGAAAAGTTTTTAGCCACTACTTGTGATATTTTTTCTGCCCTTCATCCTTTCTGGGACTCCAGTGATATGCATATTTACAATAGCTGCTTAAAAGACCTTGTTTGTTAATTCTATTTTCTCTGTCATTTTAGGTCTATTTCTGTTAACTGATTTTTCTCCTAGTTATAAGTCGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGCTTTTAGGCATGCCTGGTAATTTTGGATTGGATGCTGGACATTGCGCCTTCATATTGTTGAATGCTGGATATTGTCCTCTTTAATGGATGTTGAACTGTGCTCTTACTGGCAGTTAACTTAATTACATATCAGCTTGATCCTTTTTTAGGCTTTATTAAAACTTTATTAAGTAGACTTTACTCTAGGGCTTATTTAGTCCTATAACTAAGCTGTGACTTATTTTGGAATGCCCTCAATATTAAGCAAGGACCCTAAATTTACCCTGGCTGGTCATAACTCAAACTTCTACCAGCCCTGTATTGCCTCTGGAAATATTCAACTTACAGATACCTGGTAGTTCTTTGCCTGGCTTGTGCAATTTCAGCCTACATATAGCAGTCAGCTGTAGTTACAAGAGGAATGCTATAAAGATCCTCAGCATTTTCTCTACTGAGCACATTCCAGCCACTCAGCCTCTTCAAATTCAAATTTTTGTCTTCTCAACTCTGTGATATCATGCTCTTCTTGAGTGTGTATTGTGGTCCAGAAAGTATCTCCAGGCAGAAAGTTGGTATTATCATAGGTCTTATCTCATTTGTTTCCTTTCTCTGAGGAGTCACAGAACTGTACTAATTACCAAAAGGAGTTTTTTTCATAGATTTTTGTCTGGTTTTCTAGTTGTTTACAGTAAGAGAATAAGTCCAACTCCATTCACTCTCTTGTGTCTGGAAGTAGAAATCACTGATATTATCTATGTTAATACAGTGAAAAAACATCCAGTGTTGTCCCTCTTTCCATCCTCACCCCCACACCTCCACCACTAATACTGTCTCAGTGATGTGCAATATCCAAGGCTTGATTTAGGTCTAATGAATATCTCTCAACACAGAACACTTTGGGTTTCCCAGCACAAGAATTGAAAAAAGCACATGGTACTCTCCCAGCTGAGATTCTTAGCCTCTTTTTTCCCCTACTGTGAGCAGTGTCACCCAGGTGCCCTCACTCATCTATTTTAAATACACTCACCATCTCTGCTAACAGCTTCAGCCTCTGTTAATCAGGTAGCTTTTCATTAATGTTCTTATCCTTGTCCCAGCATCTTATTTGTCATGCTTTATTAGTAGACATGATAAGTCATAAATCTTAGTTCCTCTTAGCTTCTTAGTATCTGTTGTCAAGTTGAAGATCCCAGACAGAGGGAGATGAGAACTGGTTCATTACAGAGTGACTCTTTCTAATATCTCCTTGGTTCTTTATGATACTAATACATTCTTCCCACTGCAGTTGCCTTTTTCTCTATTTAGCTCCAATACAATTCATAGAAATGAGATCATTCGGCTTAAGGGTACATTATCTTCACTTCAACCCATCCTTCTTTAAGATGAACAATGCTGCCTTTAGATTCTGATACTGGCTCTGCCACTTATTAGCTGGATAGCCCCAGACAATTTACTGACTCTGAGTTTGTTTCCATACTTATGGAATAGGGAAAATATATTCTGCATATCTCATGGAGTGGCAACAAAAGCCAAAATTGACAAATGGGATCTAATTAAACTAAAGAGCTTCTGCACAGCAAAAGAAACTACCATCAGAGTGAACAGGCAACCTACAGAATGGGAGAAAATCTTCACAACCTATTCATCTGACAAAGGGCTAATATCCAGAATCTACAATGAATGCAAACAAATTTACAAGACAAAAACAAACAACCCCATCAAAAAGTGGGCAAAGGACATGAACAGACACTTCTCTAAAGAAGACATTTATGCAGACAAAAAACACATGAAAAAATGCTCACCATCACTGGCCAACAGAGAAATGCAAATCAAAACCACAATGAGATACCATCTCACACCAGTTAGAATGGCAATCATTAAAAAGTCAGGAAACAACAACTGCTGGAGAGGATGTGGAGAAATAGGAACACTTTTACACTGTTGGTGGGACTGTAAACCAGTTCAACCATTGTGGAAGTCAGTGTGGCAATTCCTCAGGGATCTAGAACTAGAAATACCATTTGACCCAGCCACCCCATTACTGGGTATATACACAAAGGACTATAAATCATGCTGCTATAAAGACACATGCACACGTATGTTTATTGCGGCATTATTCACAATAGCAAAGACTTGGAACCAATCCAAATGTCCAACAAAGATAGACTGGATTAAGAAAATGTGGCACATATACACCATGGAATACTATGCAGCCATAAAAAAGGATGAGTTCATGTCCTTTGTAGGGACATGGATGAAACTGGAAATCATCATTCTCAGTAAACTATCGCAAGAACAAAAAACCAAACACCGCATATTCTCACTCATAGGTGGGAATTGAACAATGAGAACACATGGACACAGGAAGGGGAACATCACACTCTGGGGACTGTTGTGGGGTGGGGGGAGGGGGGAGGGATAGCATTGGGAGATATACCTAATGCTAGAGGACGAGTTAGTGGGTGCAGCGCACCAGCATGTCACATGTATACATATGTAACTAACCTGCACATTGTGCAGATGTACCCCAAAACTTAAAGTATAATAATAATAAATTAAAAAAAACAAAATATATACATAATATGATCTCGGCTATGGAAAAGAAAAACATTCAGTGGAAAAAAGCTTAAAGGGAAGAGCACCAAAAAAAAAAAAAAAAAAAGATCAAGCAAGATAATCGATGTTAAGTACTTTATATAGTGCCTGTACCATGGTAAATGCTTAATAATTGTTAGCTATGATGACAATAATGATGATTAAAATGGTCTTTCCATACACTCTGCATACCATCCCTCTGACTGACCTGATGATTATAATTATTCCCTAACTACTAGCAAAGAAGCTTCAATCTCCCTTCACTTCTGCTTTTAAACAGTTTTCTCCTATTTTACAAAAAAGAGTGTGTCCTTTTCTTCCCTTTTCCAGCTCTTCATAAACACAGTGTATTAGTCCATTCCTTCATTGCTATAAATAAATACCTGAGACTGGGTAATTTATAAAGAAAAGAGGTTTAATTGTCTCATGGTTCTGCAGGCTGTACAGAAAGCACGATGCTGACATCTGCTCAGCTTCTGGGGAGTCCTCAGGAAACTTACAATCATGGCAAAAGGTAAAGGGGGAGCAAGGTGTCTTAC A 100 PASS CLUSTER_NUM=25425;CONTIG=TGGAAGGCAACTGTCGTTTAAGATGAAAAACAGTGATAACTGCTGAGAAATCTCAGCCTTAAGTGTGTTGAAAGTTGATAATGTCCATCTATGTGGTGAACAATTTGTGAAACAAGACTGTCAAAGAGAGTTATAGGTTCTTGGAAGTAAGAGGCAACATCTTATGATCAAGCTGTTGGGTTATCTCTTTATGATCTTCAACTACACTAAGAAGTGTGTCAATTGTATTCAGAATTCCCATAGCAGTAACTGCTTTGTCATCACTACCTTCTTCATCTGGCCCTGTCTGGATTACTTGGCTAAATGTCATTGCCAACTGTTGTGTCATTTCTACTGCAATAGGAGTAACTTCTTCACTATTTTCACAGATCATTTTCTGAATTACATTGGTAAGGTCATCATTTTCTGTTTCTGTTATAATATGAAGAAGAGCCTGCATTACAGGTCTGATAAATGCTGTGATACATTCTTTAGATTTTTCTTGATTGCTGATAAATACTTGAAGGACAATGGCAGCTTCCACTTTCACAGGCATGTCTCTGTCATCAATCAGACA;CONTIG_NUM=24722;DOWNSTREAM=TCAAGCTGTTGGGTTATCTCTTTATGATCTTCAACTACACTAAGAAGTGTGTCAATTGTATTCAGAATTCCCATAGCAGTAACTGCTTTGTCATCACTACCTTCTTCATCTGGCCCTGTCTGGATTACTTGGCTAAATGTCATTGCCAACTGTTGTGTCATTTCTACTGCAATAGGAGTAACTTCTTCACTATTTTCACAGATCATTTTCTGAATTACATTGGTAAGGTCATCATTTTCTGTTTCTGTTATAATATGAAGAAGAGCCTGCATTACAGGTCTGATAAATGCTGTGATACATTCTTTAGATTTTTCTTGATTGCTGATAAATACTTGAAGGACAATGGCAGCTTCCACTTTCACAGGCATGTCTCTGTCATCAATCAGACA;END=211033725;NS=1;READSOURCES=(0:33:68,1:0:69);SOMATICSCORE=60;SVLEN=-12257;SVTYPE=DEL;UPSTREAM=TGGAAGGCAACTGTCGTTTAAGATGAAAAACAGTGATAACTGCTGAGAAATCTCAGCCTTAAGTGTGTTGAAAGTTGATAATGTCCATCTATGTGGTGAACAATTTGTGAAACAAGACTGTCAAAGAGAGTTATAGGTTCTTGGAAGTAAGAGGCAACATCTTATGA;ensembl_gene_id=ENSG00000143473 GT:GQ 1/.:.
chr1 249175897 chr1uGROUPERuDELu4u25993 CCATACTGAACTATTAAAGTTATTTGAAATGACAATTGTAATAATATCTTCCTTGAGGAGTTCTACAATCTTTGCTGTTATTTCTTTAAGTCCTTCCTTTAATGAGTACTGTTTGGTGCATGTAACCTGCTGTGGTGTAGACAGTGTTATGGACTTCATTTTAATTTGAACTAGGTTAGAAAATTTTAGTTCCTCTAGTTTCCTTTAATATAAGTTAAAAAGATTTGGAATAAAATTCATTCCTGTAATGTCTTATAATTTGGGTGAGCAGTAAAAAGTGCATAGAGCAGTATAGAAGCAGAGG C 100 PASS CLUSTER_NUM=140439;CONTIG=TACTGAACTATTTAGATATCCCTGTGGTAATGTTTTGAATTGGTATTGTTTACCTTCCCATGTAAAGTTGGTATATTCCTGGCTTGCTTTATTTATTGGTTTGGCAAAGAACACATCTGACATGTCTATGATTGTATAGTATTTGTCATTATGATTAATGATCTTATTAACTAGCTCTTCTACATCTGGTAATGCTCTTGGCATTTTAGTTGAGACTTTATTTAAATTTCTATAGTCAATAGTTAATCTATAGCTCCTGTTTGTTTTTAAGACAGGCCAAGAAAGCTTCAAGTTTATTTACCTCTGAGTCCTTCTGTATGAATGTTTATTGTGGGATCTGGCCAGCAGCCCGCAATGCAATGGGGCTCTCTCTTTGTTCCCAGGCAGATCGGCAGGTTGAGAAATAATAGACACACACAAGATAGTGAAAGCTGGGTCCAGGGGGGTCACCGCCTTCTGGTCCCACGGAGCCAAAAATGCACGGGATATACCAGCATTTATTATTAAGTTTAGTGAGGGCAGGGGTAGGTTAGTGAGGGATTTAGGGTCATTTGATTATGAGGTTAGATGGTCACATGGGGATGAAGTAATTCTTTAACATAACATCTGTATGCAGAAGTACAGTAT;CONTIG_NUM=136911;DOWNSTREAM=CAAGAAAGCTTCAAGTTTATTTACCTCTGAGTCCTTCTGTATGAATGTTTATTGTGGGATCTGGCCAGCAGCCCGCAATGCAATGGGGCTCTCTCTTTGTTCCCAGGCAGATCGGCAGGTTGAGAAATAATAGACACACACAAGATAGTGAAAGCTGGGTCCAGGGGGGTCACCGCCTTCTGGTCCCACGGAGCCAAAAATGCACGGGATATACCAGCATTTATTATTAAGTTTAGTGAGGGCAGGGGTAGGTTAGTGAGGGATTTAGGGTCATTTGATTATGAGGTTAGATGGTCACATGGGGATGAAGTAATTCTTTAACATAACATCTGTATGCAGAAGTACAGTAT;END=249176200;NS=1;READSOURCES=(0:44:63,1:0:64);SOMATICSCORE=60;SVLEN=-303;SVTYPE=DEL;UPSTREAM=TACTGAACTATTTAGATATCCCTGTGGTAATGTTTTGAATTGGTATTGTTTACCTTCCCATGTAAAGTTGGTATATTCCTGGCTTGCTTTATTTATTGGTTTGGCAAAGAACACATCTGACATGTCTATGATTGTATAGTATTTGTCATTATGATTAATGATCTTATTAACTAGCTCTTCTACATCTGGTAATGCTCTTGGCATTTTAGTTGAGACTTTATTTAAATTTCTATAGTCAATAGTTAATCTATAGCTCCTGTTTGTTTTTAAGACAGGC GT:GQ 1/.:.
chr10 20219603 chr10uGROUPERuDELu0u11231 AAAAAAAGGCTGGCACGGTGGCTCACACCTGTAAATCCCAGCACTTTGGGAGGCCGAGGTGGGTGGGTCACCTGAGGTTGG A 47 PASS CLUSTER_NUM=60987;CONTIG=GTATACTGATTTTGGAAAATATGTCAGCTCAATTTGGAAGATTGCTAAACCACCTAAAACAGAGCCTGTTTAAAAAATAAATAAATAAAAAATAATAGTTCAAGGCCAGCCTGACCAACAAGGTGAAATCCCATCTCTACTAAAACTACAAAAATTAGC;CONTIG_NUM=59978;DOWNSTREAM=GAGTTCAAGGCCAGCCTGACCAACAAGGTGAAATCCCATCTCTACTAAAACTACAAAAATTAGC;END=20219683;NS=1;READSOURCES=(0:7:18,1:0:60);SOMATICSCORE=40;SVLEN=-80;SVTYPE=DEL;UPSTREAM=GTATACTGATTTTGGAAAATATGTCAGCTCAATTTGGAAGATTGCTAAACCACCTAAAACAGAGCCTGTTTAAAAAATAAATAAATAAAAAATAA;ensembl_gene_id=ENSG00000120594 GT:GQ 1/.:.
chr11 56932527 chr11uGROUPERuDELu1u8703 CCAGAGCACATCATGAGATCCTGGAGCCAGACCTAGAAACCTATTAAACAAGGGAACCCCAGCATGTCTCATTTATTACCCAAAGGAAGGAAATTAGCATCACATGTATAAAGCACTCAGTAGTCTATAAAATGCTCTTAGCAATTCACTTCGTGAGGAAGTGCCTTTTCCCACTTCCACAGAGGGATACCGAGCCTCAAGGGATTAGGAGACTAATCCAGGCTCACACAGCTGATAAGGAACAGCCCAGACATTTTGGCCCAGTGCTGCTAGCCCTCAATCTGGTGCTTTGCCCTCTGCACCGCCTGCCATGCAGGGAATACATGTTAATATCTCTCTGTATTAGTCTGTTCTCATGCTGCTAATAAAGACATACCCAAGACTGGTTAATTTATAAAGGAAAGAGGTTTAACTGAATCACAGTTGCACATGGCTGGCATCATGGTGGAATGCAAAGGAGGAGCAAGGCCACATCTCACATGGTGGCAGGCAAGAGGGCATGTGCAGGGGAACTCCCCTTTATAAAACCATCAGCTCTCTGCTGGGTGTGGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGCCGAGACGGGTGGATCACCTGAAGTCAGGAGTTCGAGAACAGTCTGGCCAACATGGCGAAACCCCATCTCTATTAAAAATACAAAAAAAAATTAGTTGGGCGTGGCAGTGAGTGCCTGTAATCCCAGCTACTCGAGAGGCTGAGGCAGGAGAATCACCTGAGCCCAGGAGGCAGAGGTTGCAGTGAGCCAAGATCACGCCACTGCACTCCAGCCTGGGTGATAAGAGTGAAACTCGGTCTCAAAAAAAAAAAAAAAAAAAAAATCACATCTCACGAGACTTATTCACTATCATGAGAACAGCATGGGAAAACCCTGCCCCCATGATTCAATTACCTCCCACTGGGTCCCTCCTATGACATGTGGGGATTATTACAATTCATGGTGAGATTTGGGTGGGGACACAAAGCCAAACCATATCACTCTCTTTCTTGGCCACAGGTGGACTTGAAAAACCCTTTCCCTTAACCAAGCAGGAGCCCCAGTAGCTGCTTTGTTCAACGTCTGTTTCTCTAAGGTCTCCTACTCTGGAATATTTAGGAAAACCCAAGGTGGCTCAAAAAGATCATCCCTGTACCAAGCCTCAGGGATTCTAGTGTGACCCAACCTCTCCCAGTCCCTATAGGCATCTCTTTCAAACATCAGAACTGGTGCAGACTCAATAGAAGAAAGGTGTGACTCCAAGATGTCCTCCCTCACAGCCCTTTATCACAATGGGGCTCTCTTCACCGTAGAAGGGAAGGCTGAGGCTCAGAAATATGGTGTAGGCTTGGACTTTGGAAGGAGAATGACTAAGCTGAAGTTCTTCCTCTGCCATTTACAAGCTGTGTGACTTTGGAAAACTTTCTTAATGTTTTTGCTTTTAATTTCCTCATGTATAAAAGATGGGGTTGTCATACTTAGGTTTAAGACTATTGCACGTGCCTGTAATTCTAGCACTTTGGGAGGCCGAGGTGGGCAGATCACTTGAGGTCAGGAGTTTGAGACCAGCTGGCCAACATGGTGAAACACCATCGCTACTAAAAATATAAAAATTAGCCAGGCATGGTGATGCATGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGATTCGCTTGAACCTGGGACGTGGAGGTTGCGTTGAGGCAAGATCACGCCACTGCACTCCAGCCTGGGCAACAGAATGAGACTCCACCTCAAAAAAATAGAAGACTATTGCAAAGATTTTAAAAGATGGCACAGGTACAACACTGAACACAGTGTTTCATGAGTGACAGTCATAAGCTTTTCTACCACCTAACTGTGTTACTTTTAGCAAACTACCTAATTTATCTCGGCCTCGGTTGTTTTGTGATTCTTTTCAAGGGAAAAAAAAAGCACCTCCCTTCATAAGCCTGCTATAAGAACAATATAAAATAGTTGACATAAAGCACTTAATCTCTTGCCTGTCACAGGAAAGGTGCTCAACACCTGTTAGCTCTGTGTTGATGTCCCCAGATCAGAGAGCCAGAAAAGGAGGGCTAAAGTTCCAACCAGGATCTTCTGGTTCCAACCCAGCAGCACCTGAGCAAGGTTGATAATGGTAAAGAAAAGAAGAAATAAGCAATAGGGGCCTCACAAACACAGGCAGGAATAAATCACTCCCATGTGGCAGTTTTCTGTGCCTGACCCAAGAGATAGGTGTTGCACCTTTATCCATGTGGACAGATAAGAAAGAGCAAAGGGCATAGGTCACAGAGGTGAGTATGACCTCATTGCAGTGCCAGGATATTTCCAGGCAATTGGCAAGACTTATTGACAATCATCCAATAAATAGGATAAATAGTTCTTACTTCCCAAGTGCCTGGGAAGAGAGCTTGCAGCTCTTTCCAATTCCTGCCTCTCATCTCTTCCTCCTCGGACACTGCAGCTCTCCGTTTCTGGAAAATCTCAGGGCAGAATCTGGGCTCCTTCCCACTTTCCTCTGTCCAGAATTCTAAGGATGCCTGGGAGAAGGCATCTGCCCTGAATGAATGGGTCAGAGGCATGATTCCAAGTGACTGGCTGGTAATTGGAAGAGCTCAGTGGTCTGGCTGGGGAGATGAGAGCCTGCTAAGCACATCTGGCCAGCATCAGAATCACAAATTGAAGAGAGCTTGGAAGGACTCAGCCCCCACTGACATTCACAAAGGAAGGAAAATGTAGGGAGCCAGACAGAAAGGAGTGATGCTCTTCAAAGTCAACAGGCTTATAACAAACACCATCTCATAGGTGAAAGTGGGAGCACAGAACAGGCACACTCAGCTAACACACAGCTTTCTGAGGGAGGTCATCCTCCACCAAATGAAAATAGCCCTGCTTTTTCATTTTTTAATTTTTATTAATTTTTAAATCAACAAATAAAAATTATATATATTGGCCAGGTACAGTGGTTCATGCCTATAATCCCAGCACTTTGGGACGCCAAGGCAGGAGAACCACTTGAGACCAGGAGTTCAAGACCAGCCTGGACAACATAGTGAGATCCCATCACTACAAAAGAAAAAATATTTAAGGAAAAAAATTGTATATATTTATGGCATACGATGTGAAGTTTTGACATATCTACACATTGTGAAATGATTAAATCAAGCTAATTAACATATCCATCATGCCACATCCTTAAATTTTTATGGTGAGAACATTTAAGATCTATCTCAGCAATTTTGAAGTGCATGCTATTGTCACCATGCTACACAATAGACATCCAGAATTTATTCATCTTGTCTAGCTGAAACATTGTATCCTTTGACCAACATCTCCATACCTCTCCTGCATACCTCCCAGCCCCTGGTAACCATTATTCTCCTCTGCTGCTATGAGTTCGATTTGTTCGGATTCCACATATAAATAAGATCGTGCAATATATTTCTGTTTATGCCTGGCTTATTTCACTTAGCAAAATGTCCTCCAGTTTCATCCATGTTGTCACAAATGACAAGATCTCCTTCTTTTTTAAGACTGAATAGTATTCTATTGTGTACATGTACCACATTTTCTTTATCTGCTGTATTAGTCTGTTTTCACACTGCTGATAAAGACATATCCAAAACTGGGAACAAAAAGAGGTTTAATTGGACTTACAGTTCCACATGGCTGGAGACGCCTCAGAATCATCACAGGAGGTGAAAGGCAGTTCTTACATAGCAGCAGCAAGAAAAAATGAGGAGGAAGCAAAAGCAGAAACCCCTGATAAACCCATCAGATCTCATGAGACTTATTCACTATCACGAGAATAGCACGGGAAAGACCGGCCCCCATGATTCAATTACACACTCCCCGCCCCTGCTGGGTCCCTTCCACAACACGTGGGAATTCTGGACAATATAATTCAAGTTGAGATTTTGGTGGGGACACAGCCAAACCGTATCAT C 100 PASS CLUSTER_NUM=52260;CONTIG=CTTCTACCCCTGGCAGTGCAAAGTCCAGGACCAGGCAGGTGGGGGGTGCTGGAAAAGTTAGCAATTGAGTGATTGTACAGCCAATTTGTCACTTTCATGGGATCGGAGTGAGGCTATCTCAGAATCTTCTGTATCTACTTCATCTCTTGCTCTTTCCATTCTTTGATACTTTGACACATCCACATCCACTGCTCCTGGCCCCTCCGAATCTCATGTCCTCACATTTCAAAATCAATCATGCCTTCCCAACAGTCCCCCAAAGTCTTAACTTATTTCAGCATTAATCCAAAAGTCCACAGTCCAAAGTCTTATCTGAGACAAGGCAAGTCCCTTTCACCTATGAGCCTGCAAAATCAAAAGCAAGCTAGTTACTTCCTAGATACAATGGGGATACAGGTACTAAGTAAATACTGCTGATCCAAATGGGAGAAATTGGCCAAAACAAAGGGGCTACAGGGCCCATGCAAGTCT;CONTIG_NUM=52670;DOWNSTREAM=TCTGCTCCTGGCCCCTCCGAATCTCATGTCCTCACATTTCAAAATCAATCATGCCTTCCCAACAGTCCCCCAAAGTCTTAACTTATTTCAGCATTAATCCAAAAGTCCACAGTCCAAAGTCTTATCTGAGACAAGGCAAGTCCCTTTCACCTATGAGCCTGCAAAATCAAAAGCAAGCTAGTTACTTCCTAGATACAATGGGGATACAGGTACTAAGTAAATACTGCTGATCCAAATGGGAGAAATTGGCCAAAACAAAGGGGCTACAGGGCCCATGCAAGTCT;END=56936485;NS=1;READSOURCES=(0:21:23,1:0:65);SOMATICSCORE=60;SVLEN=-3958;SVTYPE=DEL;UPSTREAM=CTTCTACCCCTGGCAGTGCAAAGTCCAGGACCAGGCAGGTGGGGGGTGCTGGAAAAGTTAGCAATTGAGTGATTGTACAGCCAATTTGTCACTTTCATGGGATCGGAGTGAGGCTATCTCAGAATCTTCTGTATCTACTTCATCTCTTGCTCTTTCCATTCTTTGATACTTTGACACATCCACATCC GT:GQ 1/.:.
I used a code:
out = open('/home/istolarek/OUTintersectPT','w')
masterlist = [row for row in Pt]
for line in a:
g=[]
if line.startswith('chr'):
line = line.strip().split()
g.append(line[0])
## print line[0]
##print len(w)
for row in masterlist:
row = row.strip().split()
f = range(int(row[1]),int(row[2]))
w=[]
for i in g:
if i == row[0]:
w.append(int(line[1]))
for i in w:
## print line[0],row[0],line[1]
## out.write(str(line[0])+'\t'+str(row[0])+'\t'+str(line[1])+'\t'+str(f)+'\n')
if int(i) in f:
out.write(str(line)+'\n')
else:
break
else:
break
out.close()
This code seems to work, but takes far too much time.
So if column 1 in both files matches, go to comparing second column. Second column from file a is just a number (line[1]), in file Pt it is a range of values f = range(int(row[1]),int(row[2])). So if the first condition about matching columns 1 (these with chr values) and if values from second column from file a are in the range of f, I want to write these lines to the output.
I wrote another one:
I wrote:
masterlist = [row for row in Pt]
for line in a:
line = line.strip().split()
for row in masterlist:
row = row.strip().split()
b = int(line[1])
f = range(int(row[1]),int(row[2]))
if (line[0] == row[0]):
if a in f:
print b,f
These both should be a match. But the script only reports the first ontry from Pt file. If the first entry is not matched, the output is none. I want the script to output all matches
I'm fighting with this for quite some time.
Well, first of all, you are looping on a, but you assigned a value to a inside the loop, so it's not likely to get very far.
Second of all, I believe that strip().split() is redundant. You don't need strip() because it's implied in split().
Third of all, you should only split each line in the master file once. You are doing that for each line of input, which is bound to increase processing time a bit.
I am not entirely certain I understand your requirements from your code, but it seems to me something along these lines should help you:
import sys
from collections import defaultdict
master = defaultdict(list)
with open('Pt') as Pt:
for entry in Pt:
n, low, high = entry.split()
master[n].append(map(int, (low, high)))
with open('a') as a:
for line in a:
n, i = line.split()[:2]
for low, high in master[n]:
if low <= int(i) <= high:
sys.stdout.write(line)
break
To explain: First read and process all the data in the master file just once. Storing the master data in a defaultdict is handy here because it allows you to scan only the rows that matched the first column. map(int, ...) converts to ints.
When processing the input file, we can retrieve the ranges against which to compare the second value using the first value. Since master is a defaultdict(list), if there are no matches for the first column, we'll end up iterating an empty list.
Note that your original code using range() would have been equivalent to a condition
low <= i < high
You'll have to adjust the comparison operators as needed.
UPDATE oops. I put the break outside the condition. After fixing it I get the following three items:
chr1 1161693 chr1uGROUPERuDELu0u832 TGCTCTTTCCAGAAACCCTCAACCCTGTACGGTCAGGAGGAAACATGGCACCTCCCCTCTGGGG T 63 NormalSupport;MinSampleCount;LowSomaticScore CLUSTER_NUM=5454;CONTIG=GGTGCAGGGAAGCAGGAAGGAAGTGAAGCTCAAAAGCCCCTAGGACAGGGCACCTCCCCTCTGGATGCTCTTTCCAGAAACCCTCAACCTTGTACGGTCAGGAGAAAACACATCCCACAAG;CONTIG_NUM=5840;DOWNSTREAM=GCTCTTTCCAGAAACCCTCAACCCTGTACGGTCAGGAGAAAACACATCCCACAAG;END=1161756;NS=1;READSOURCES=(0:3:0,1:2:13);SOMATICSCORE=19;SVLEN=-63;SVTYPE=DEL;UPSTREAM=GGTGCAGGGAAGCGGGAAGGAAGTGAAGCTCAAAAGCCCCTAGGACAGGGCACCTCCCCTCTGGAT;ensembl_gene_id=ENSG00000078808 GT:GQ 1/.:.
chr1 158851689 chr1uGROUPERuDELu3u4452 GGGGAGTAATTCTTATTCATGATATGAAAACTCTAATGTGTTTCTTATTCCAGAAAA G 100 NormalSupport CLUSTER_NUM=25182;CONTIG=CATATTTTGCTATATCTCACATCATTGTTCATCTGATAATATATGAAAACTACAATGTGTTTCTTATTCCAGAAAGGGGAGTAATTCTTATTCATGAATAAACACTGAAGGAGAAAGATTATGGATCATAGTGGGAAAAGCCACAATACCATCTACATTC;CONTIG_NUM=24300;DOWNSTREAM=GGGAGTAATTCTTATTCATGAATAAACACTGACGGAGAAAGATTATGGATCATAGTGGGAAAAGCCACAATACCATCTACATTC;END=158851745;NS=1;READSOURCES=(0:11:0,1:3:18);SOMATICSCORE=55;SVLEN=-56;SVTYPE=DEL;UPSTREAM=CATATTTTGCTATATCTCACATCATTGTTCATCTGATAATATATGAAAACTCCAATGTGTTTCTTATTCCAGAAAG;ensembl_gene_id=ENSG00000229849 GT:GQ 1/.:.
chr1 165014865 chr1uGROUPERuDELu3u7344 ACTGGCATTAGCTATGCTTCCTTAGGCAGACAGCATGTTGAGAAATTCACATTCATCAG A 100 NormalSupport CLUSTER_NUM=40249;CONTIG=CTCCAGTAAAGAGCATCTTTTAATGAAGTGTATCTGCCTGGGCTAGAAAGGCAGCTGCCTCCACTAAAGCAGGGCTGGTCCAGAAATATTACCACTTGCCTAATCCTTATAGTAATCCTAACTGGCAGGTATTATTATATCCCAATTCACACACTTAGAGG;CONTIG_NUM=38845;DOWNSTREAM=CTTGCCTAATCCTTATAGTAATCCTAACTGGCAGGTATTATTATATCCCAATTCACACACTTAGAGG;END=165014923;NS=1;READSOURCES=(0:32:0,1:9:18);SOMATICSCORE=60;SVLEN=-58;SVTYPE=DEL;UPSTREAM=CTCCAGTAAAGAGCATCTTTTAATGAAGTGTATCTGCCTGGGCTAGAAAGGCAGCTGCCTCCACTAAAGCAGGGCTGGTCCAGAAATATTACCA GT:GQ 1/.:.
At least, don't do this:
row = row.strip().split()
f = range(int(row[1]),int(row[2]))
w=[]
print row[0]
if (line[0] == row[0]):
w.append(int(line[1]))
for i in w:
if (int(i) in f):
Instead:
f = int(row[1]), int(row[2])
...
if f[0] <= int(i) <= f[1]:
or similar.
Related
Sorry for my previous post, I had no idea what I was doing. I am trying to cut out certain ranges of lines in a given input file and print that range to a separate file. This input file looks like:
18
generated by VMD
C 1.514895 -3.887949 2.104134
C 2.371076 -2.780954 1.718424
C 3.561071 -3.004933 1.087316
C 4.080424 -4.331872 1.114878
C 3.289761 -5.434047 1.607808
C 2.018473 -5.142150 2.078551
C 3.997237 -6.725186 1.709355
C 5.235126 -6.905640 1.295296
C 5.923666 -5.844841 0.553037
O 6.955216 -5.826197 -0.042920
O 5.269004 -4.590026 0.590033
H 4.054002 -2.184680 0.654838
H 1.389704 -5.910354 2.488783
H 5.814723 -7.796634 1.451618
O 1.825325 -1.537706 1.986256
H 2.319215 -0.796042 1.550394
H 3.390707 -7.564847 2.136680
H 0.535358 -3.663175 2.483943
18
generated by VMD
C 1.519866 -3.892621 2.109595
I would like to print every 100th frame starting from the first frame into its own file named "snapshot0.xyz" (The first frame is frame 0).
For example, the above input shows two snapshots. I would like to print out lines 1:20 into its own file named snapshot0.xyz and then skip 100 (2000 lines) snapshots and print out snapshot1.xyz (with the 100th snapshot). My attempt was in python, but you can choose either grep, awk, sed, or Python.
My input file: frames.dat
1 #!/usr/bin/Python
2
3
4
5 mest = open('frames.dat', 'r')
6 test = mest.read().strip().split('\n')
7
8 for i in range(len(test)):
9 if test[i] == '18':
10 f = open("out"+`i`+".dat", "w")
11 for j in range(19):
12 print >> f, test[j]
13 f.close()
I suggest using the csv module for this input.
import csv
def strip_empty_columns(line):
return filter(lambda s: s.strip() != "", line)
def is_count(line):
return len(line) == 1 and line[0].strip().isdigit()
def is_float(s):
try:
float(s.strip())
return True
except ValueError:
return False
def is_data_line(line):
return len(line) == 4 and is_float(line[1]) and is_float(line[2]) and is_float(line[3])
with open('frames.dat', 'r') as mest:
r = csv.reader(mest, delimiter=' ')
current_count = 0
frame_nr = 0
outfile = None
for line in r:
line = strip_empty_columns(line)
if is_count(line):
if frame_nr % 100 == 0:
outfile = open("snapshot%d.xyz" % frame_nr, "w+")
elif outfile:
outfile.close()
outfile = None
frame_nr += 1 # increment the frame counter every time you see this header line like '18'
elif is_data_line(line):
if outfile:
outfile.write(" ".join(line) + "\n")
The opening post mentions to write every 100th frame to an output file named snapshot0.xyz. I assume the 0 should be a counter, ot you would continously overwrite the file. I updated the code with a frame_nr counter and a few lines which open/close an output file depending on the frame_nr and write data if an output file is open.
This might work for you (GNU sed and csplit):
sed -rn '/^18/{x;/x{100}/z;s/^/x/;x};G;/\nx$/P' file | csplit -f snapshot -b '%d.xyz' -z - '/^18/' '{*}'
Filter every 100th frame using sed and pass that file to csplit to create the individual files.
I have a program that is reading a file 'flanking seqs' which contains columns of text each meaning something different:
1 1 44457990 TAA CTCTCCTAAAGGACC
1 1 44461833 TGA CCAGCCTGAAGGGCT
1 1 148594641 TAA CCACAATAAGCAGCT
1 1 43241066 TGA ACTCACTGAGAGTGG
1 1 43240880 TAG CTTCTCTAGGAATGG ...
First col: chromosome number, second col: DNA strand, third col: position of stop codon in DNA, fourth col: stop codon, fifth col: 6 bases upstream and downstream surrounding the stop codon, i.e. the flanking sequence of each stop codon.
Now, my program is supposed to read this file and extract the 3 bases before and after each stop codon from the flanking sequence column and write to a file containing two columns: the stop codon and then the flanking sequence. The file should contain flanking sequences of all three stop codons TAA, TAG and TGA, however when I run the program, it only gives me the flanking sequences for TGA stop codons, but not for the rest of them.
Here is an example of what the outfile looks like:
TGA GGGCTT 1
TGA GAACGT 2
TGA CTTCTT 17
TGA CACCCT 15
TGA GAACGG 1
TGA GAACGC 3
I can't see where I am going wrong but I'm not very experienced so I'm sure I am missing something simple. I'd appreciate any help in spotting my errors! Here is the code:
bases = ['A','T','C','G']
sequenceCount = {}
for x1 in bases:
for x2 in bases:
for x3 in bases:
for x4 in bases:
for x5 in bases:
for x6 in bases:
sequenceCount[x1+x2+x3+x4+x5+x6] = 0
infile = open('flanking seqs.txt','rU')
outfile = open('context resultsNEW.txt','w')
for line in infile:
parts = line.split('\t')
chromosome = parts[0]
position = int(parts[2])
stopcodon = parts[3]
flankseq = parts[4].strip()
flankseq = flankseq[3:6]+flankseq[9:12]
if flankseq in sequenceCount:
sequenceCount[flankseq] += 1
for s in sequenceCount:
outfile.write(stopcodon+'\t'+s+'\t'+str(sequenceCount[s])+'\n')
your outfile.write takes place outside of the for line in infile loop, so the value of stopcodon is always whatever value it had in the final line of your input text file.
If you're trying to correlate sequence counts against both stop codons and flank sequences, you'll need to use both variables as a key. If you don't know all stop codons ahead of time, you won't be able to initialize sequenceCount's values to 0 using your "multiple nested for loops" approach, so you should probably use a defaultdict.
from collections import defaultdict
sequenceCount = defaultdict(int)
infile = open('flanking seqs.txt','rU')
outfile = open('context resultsNEW.txt','w')
for line in infile:
parts = line.split('\t')
chromosome = parts[0]
position = int(parts[2])
stopcodon = parts[3]
flankseq = parts[4].strip()
flankseq = flankseq[3:6]+flankseq[9:12]
sequenceCount[flankseq, stopcodon] += 1
for key, value in sequenceCount.iteritems():
flankseq, stopcodon = key
outfile.write(stopcodon+'\t'+s+'\t'+str(sequenceCount[s])+'\n')
When you produce your output, you print the last stopcodon that was read from the file with every line, regardless of what values for stopcodon were used in the previous loop. Perhaps your sequenceCount dictionary needs to be indexed by a combination of stopcodon and flankseq?
The background:
Table$Gene=Gene1
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0 2872 208 0.928 0.00484 0.918 0.937
1 2664 304 0.822 0.00714 0.808 0.836
2 2360 104 0.786 0.00766 0.771 0.801
3 2256 48 0.769 0.00787 0.754 0.784
4 2208 40 0.755 0.00803 0.739 0.771
5 2256 48 0.769 0.00787 0.754 0.784
6 2208 40 0.755 0.00803 0.739 0.771
Table$Gene=Gene2
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0 2872 208 0.938 0.00484 0.918 0.937
1 2664 304 0.822 0.00714 0.808 0.836
2 2360 104 0.786 0.00766 0.771 0.801
3 2256 48 0.769 0.00787 0.754 0.784
4 1000 40 0.744 0.00803 0.739 0.774
#There is a new line ("\n") here too, it just doesn't come out in the code.
What I want seems simple. I want to turn the above file into an output that looks like this:
Gene1 0.755
Gene2 0.744
i.e. each gene, and the last number in the survival column from each section.
I have tried multiple ways, using regular expression, reading the file in as a list and saying ".next()". One example of code that I have tried:
fileopen = open(sys.argv[1]).readlines() # Read in the file as a list.
for index,line in enumerate(fileopen): # Enumerate items in list
if "Table" in line: # Find the items with "Table" (This will have my gene name)
line2 = line.split("=")[1] # Parse line to get my gene name
if "\n" in fileopen[index+1]: # This is the problem section.
print fileopen[index]
else:
fileopen[index+1]
So as you can see in the problem section, I was trying to say in this attempt:
if the next item in the list is a new line, print the item, else, the next line is the current line (and then I can split the line to pull out the particular number I want).
If anyone could correct the code so I can see what I did wrong I'd appreciate it.
Bit of overkill, but instead of manually writing parser for each data item use existing package like pandas to read in the csv file. Just need to write a bit of code to specify the relevant lines in the file. Un-optimized code (reading file twice):
import pandas as pd
def genetable(gene):
l = open('gene.txt').readlines()
l += "\n" # add newline to end of file in case last line is not newline
lines = len(l)
skiprows = -1
for (i, line) in enumerate(l):
if "Table$Gene=Gene"+str(gene) in line:
skiprows = i+1
if skiprows>=0 and line=="\n":
skipfooter = lines - i - 1
df = pd.read_csv('gene.txt', sep='\t', engine='python', skiprows=skiprows, skipfooter=skipfooter)
# assuming tab separated data given your inputs. change as needed
# assert df.columns.....
return df
return "Not Found"
this will read in a DataFrame with all the relevant data in that file
can then do:
genetable(2).survival # series with all survival rates
genetable(2).survival.iloc[-1] last item in survival
The advantages of this is that you have access to all the items, any mal-formatting of the file will probably be better picked up and prevent incorrect values from being used. If my own code i would add assertions on column names before returning the pandas DataFrame. Want to pick up any errors in parsing early so that it does not propagate.
This worked when I tried it:
gene = 1
for i in range(len(filelines)):
if filelines[i].strip() == "":
print("Gene" + str(gene) + " " + filelines[i-1].split()[3])
gene += 1
You could try something like this (I copied your data into foo.dat);
In [1]: with open('foo.dat') as input:
...: lines = input.readlines()
...:
Using with makes sure the file is closed after reading.
In [3]: lines = [ln.strip() for ln in lines]
This gets rid of extra whitespace.
In [5]: startgenes = [n for n, ln in enumerate(lines) if ln.startswith("Table")]
In [6]: startgenes
Out[6]: [0, 10]
In [7]: emptylines = [n for n, ln in enumerate(lines) if len(ln) == 0]
In [8]: emptylines
Out[8]: [9, 17]
Using emptylines relies on the fact that the records are separated by lines containing only whitespace.
In [9]: lastlines = [n-1 for n, ln in enumerate(lines) if len(ln) == 0]
In [10]: for first, last in zip(startgenes, lastlines):
....: gene = lines[first].split("=")[1]
....: num = lines[last].split()[-1]
....: print gene, num
....:
Gene1 0.771
Gene2 0.774
here is my solution:
>>> with open('t.txt','r') as f:
... for l in f:
... if "Table" in l:
... gene = l.split("=")[1][:-1]
... elif l not in ['\n', '\r\n']:
... surv = l.split()[3]
... else:
... print gene, surv
...
Gene1 0.755
Gene2 0.744
Instead of checking for new line, simply print when you are done reading the file
lines = open("testgenes.txt").readlines()
table = ""
finalsurvival = 0.0
for line in lines:
if "Table" in line:
if table != "": # print previous survival
print table, finalsurvival
table = line.strip().split('=')[1]
else:
try:
finalsurvival = line.split('\t')[4]
except IndexError:
continue
print table, finalsurvival
I would like to solve my problem, which is:
When conditions are met for my line, print out all lines starting from this line up until this line + value
I have a code looking like this:
import re
##
def round_down(num):
return num - (num%100000) ###reduce search space
##
##
##def Filter(infile, outfile):
##out = open(outfile,'w')
infile = open('AT_rich','r')
cov = open('30x_good_ok_bad_0COV','r') ###File with non platinum regions
#platinum_region = [row for row in Pt]
platinum_region={} ### create dictionary for non platinum regions. Works fast
platinum_region['chrM']={}
platinum_region['chrM'][0]=[]
ct=0
for region in infile:
(chr,start,end,types,length)= region.strip().split()
start=int(start)
end=int(end)
length = int(length)
rounded_start=round_down(start)
##
if not (chr in platinum_region):
platinum_region[chr]={}
if not (rounded_start in platinum_region[chr]):
platinum_region[chr][rounded_start]=[]
platinum_region[chr][rounded_start].append({'start':start,'end':end,'length':length})
##
##c=0
for vcf_line in cov: ###process file with indels
## if (c % 1000 ==0):print "c ",c
## c=c+1
vcf_data = vcf_line.strip().split()
vcf_chrom=vcf_data[0]
vcf_pos=int(vcf_data[1])
vcf_end=int(vcf_data[2])
coverage = int(vcf_data[3])
rounded_vcf_position=round_down(vcf_pos) ###round positions to reduce search space
## print vcf_chrom
## for vcf_line in infile: ###process file with indels
## if (c % 1000 ==0):print "c ",c
overlapping = 'false'
if vcf_chrom in platinum_region and rounded_vcf_position in platinum_region[vcf_chrom]:
for region in platinum_region[vcf_chrom][rounded_vcf_position]:
if (vcf_pos == region['start']):# and vcf_end == region['end']):# and (vcf_end > region['start'] and vcf_end < region['end']):
if vcf_chrom != 'chrX' and vcf_chrom != 'chrY':
print vcf_data
Files are just set of intervals start-end, first column[0] conatins chromosome ex.'chr1':
cov:
chr1 1 3 AT_rich 3
chr1 5 8 AT_rich 4
chr1 10 12 AT_rich 3
last column is the region['length']
infile:
chr1 1 2 4247
chr1 2 3 4244
chr1 3 5 4224
chr1 5 7 4251
chr1 7 8 4251
chr1 8 12 4254
chr1 12 15 4253
output would be:
chr1 1 2 4247
chr1 2 3 4244
chr1 5 7 4251
chr1 7 8 4251
chr1 8 12 4254## here there isn't really start-start matching position, but there is an overlap between two files
chr1 12 15 4253
so the main idea is, if region from one file(cov) starts at the position of the region from second file(infile). Print all positions starting from this matching start position up until the length of the region from first file(cov). Sometimes there is not exact matching position, just some overlap, so in this case we can probably not care about those (even though it would be nice to also have them in output)
I would like to print lines starting from vcf_data(when conditions met) until vcf_data + region['length']. What is the way to add this to my code?
Add this condition to the loop:
if region_count > 0:
region_count -= 1
print line
Before the loop:
region_count = 0
And inside the "condition was met" but before the new condition block above:
region_count = region['length']
I don't quite get your input and output format, but from your description, I guess you can do something like this:
lines = string.split('\n') # Put the content into array of lines
for idx, line in enumerate(lines): # Iterate over the lines, with the index
if condition(line): # If the line fulfill a condition
print lines[idx:idx+length] # Print the line range
I am new to python and I am trying make a program that reads a file, and puts the information in its own vectors. the file is an xyz file that looks like this:
45
Fe -0.055 0.033 -0.047
N -0.012 -1.496 1.451
N 0.015 -1.462 -1.372
N 0.000 1.386 1.481
N 0.070 1.417 -1.339
C -0.096 -1.304 2.825
C 0.028 -1.241 -2.739
C -0.066 -2.872 1.251
C -0.0159 -2.838 -1.205
Starting from the 3rd line I need to place each in its own vectors, so far I have this:
file=open("Question4.xyz","r+")
A = []
B = []
C = []
D = []
counter=0
for line in file:
if counter>2: #information on particles start on the 2nd line
a,b,c,d=line.split()
A.append(a)
B.append(float(b))
C.append(float(c))
D.append(float(d))
counter=counter+1
I am getting this error:
File "<pyshell#72>", line 3, in <module>
a,b,c,d=line.split()
ValueError: need more than 0 values to unpack
Any ideas on where I am going wrong?
Thanks in advance!
It looks like you have lines in your that doesn't actually result in 4 items on splitting. Add a condition for that.
for line in file:
spl = line.strip().split()
if len(spl) == 4: # this will take care of both empty lines and
# lines containing greater than or less than four items
a, b, c, d = spl
A.append(a)
B.append(float(b))
C.append(float(c))
D.append(float(d))
Would you happen to have an empty line somewhere, by any chance (or with only a '\n') ?
You could force
if counter >= 2:
if line.strip():
(a,b,c,d) = line.strip().split()
An advantage of not checking whether your split line has a len of 4 is that it won't silently skip the line if it doesn't have the right number of fields (like you experienced yourself with the empty lines at the end of your files): you'll get an exception instead, which forces you to double-check your input (or your logic).