in reply to Re^2: Command or Perl script for changing headers of multiple FASTA files in a specific order listed in a txt file
in thread Command or Perl script for changing headers of multiple FASTA files in a specific order listed in a txt file

This Perl script does the first part reading the filenames and headers into an array using File::Find. How is the order of the lines in Header.txt matched to these filenames/headers ?

#!/usr/bin/perl use strict; use File::Find; use Data::Dumper; my $folder = '/folder/with/fasta/files'; my @files=(); find( \&process, $folder ); print Dumper \@files; sub process { return unless $_ =~ /CDS\.fasta$/; my $file = $File::Find::name; open my $fh,'<',$file or die $!; my $header = <$fh>; close $fh; push @files,[$File::Find::dir,$_,$header]; }
poj
  • Comment on Re^3: Command or Perl script for changing headers of multiple FASTA files in a specific order listed in a txt file
  • Download Code

Replies are listed 'Best First'.
Re^4: Command or Perl script for changing headers of multiple FASTA files in a specific order listed in a txt file
by Anonymous Monk on Sep 12, 2017 at 12:08 UTC

    The mapping of names in Headers.txt and the FASTA files can work.

    Chimpanzee_AMY2B_CDS.fasta MP.C_AMY2B Human_AMY2B_CDS.fasta FP.H_AMY2B
    Following solution worked for my problem.

    create a folder called test (in the same folder where fasta files are located) and run the command:

    $ mkdir test

    execute:

     for i in $(seq 1 $(ls *.fasta |wc -l)); do sed -n "$i"p headers.txt| sed 's/^/>/'> test/$(ls *.fasta| sed -n "$i"p); cat $(ls *.fasta| sed -n "$i"p)| sed '1d' >>test/$(ls *.fasta| sed -n "$i"p); done

    Cheers.. :)