column relationship value num_or_string filter_or_append order a <= 0.3 num filter 1 b eq abc string append 3 c <= 0.3 num filter 2 #### a b c 0.2 abc 0.3 0.1 abd 0.3 0.4 abe 0.2 0.1 abc 0.5 0.7 abt 0.7 0.1 abd 0.8 #### #!/usr/bin/perl use warnings; use strict; use autodie; use Data::Dumper; @ARGV == 2 or die "Invalid number of arguments. Please re-run program and suppy as arguments \n1) the filter file and \n2) the input file."; my ($filter_file, $input_file) = @ARGV; open (my $FILTER,"<","$filter_file") or die "Cannot open filter file: $!"; my @filter_array; <$FILTER>; while (my $line = <$FILTER>) { chomp $line; my @line_array = split(/\t/, $line); push (@filter_array, \@line_array); } @filter_array = sort { $a->[5] <=> $b->[5]} @filter_array; #print Dumper \@filter_array, "\n"; #[DEBUGGING] my $num_elements = (@filter_array-1); #print "$num_elements", "\n"; #[DEBUGGING] open (IN,"<","$input_file") or die "Cannot open input file: $!"; open (OUTFILE, ">>", "OUTPUT_$input_file") or die "Cannot create an output file: $!"; for (my $i=0; $i<=$num_elements; $i++) { my $search_string = $filter_array[$i][0]; # print "$search_string", "\n"; my $header = ; my @header_titles = split /\t/, $header; my $extract_col = 0; for my $header_line (@header_titles) { last if $header_line =~ m/$search_string/; $extract_col++; } print "Extracting column $extract_col\n"; while (my $row = ) { last unless $row =~ /\S/; chomp $row; my @cells = split /\t/, $row; # print "$cells[$extract_col]\n"; if ((eval "$cells[$extract_col] $filter_array[$i][1] $filter_array[$i][2]")) { print OUTFILE "$cells[$extract_col]", "\n"; } } } #### if ((eval "$cells[$extract_col] $filter_array[$i][1] $filter_array[$i][2]")) { print OUTFILE "$cells[$extract_col]", "\n"; } #### if ((eval "$cells[$extract_col] $filter_array[$i][1] $filter_array[$i] +[2]")) { print OUTFILE "$cells[$extract_col]", "\n"; }