#!/usr/bin/perl use strict; use warnings; use List::MoreUtils qw(uniq); use 5.10.0; my %gene2TF2val; while () { my ($gene, $tf) = split; $gene2TF2val{$gene}{$tf}++; } # ID distinct transcription factors, sorted by value my @tf = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0]} uniq map keys %$_, values %gene2TF2val; # Print table header say join "\t", "NAMES", @tf; # Print table contents for my $gene (sort keys %gene2TF2val) { say join "\t", $gene, map $_ ? '+' : '-', @{$gene2TF2val{$gene}}{@tf}; } __DATA__ geneA T1 geneA T1 geneA T2 geneB T8 geneC T10 geneC T1