#!/usr/bin/perl use warnings; use strict; use feature qw{ say fc }; *ARGV = *DATA{IO}; my $column_line = ""; $column_line = <> while $column_line !~ /Invoice ID/i; chomp( my @columns = split /\t/, $column_line ); chomp( my @data_lines = <> ); # Sort the data lines according to the "Company Name" field, and then the "Invoice ID" field. my ($company_name_index) = grep { $columns[$_] eq "Company Name" } 0 .. $#columns; my ($invoice_ID_index) = grep { $columns[$_] eq "Invoice ID" } 0 .. $#columns; @data_lines = sort { my ($company_name_a, $invoice_ID_a) = (split /\t/, $a)[$company_name_index, $invoice_ID_index]; my ($company_name_b, $invoice_ID_b) = (split /\t/, $b)[$company_name_index, $invoice_ID_index]; fc($company_name_a) cmp fc($company_name_b) or $invoice_ID_a <=> $invoice_ID_b } @data_lines; print "Replacement Header Text Here\n\n$column_line"; say for @data_lines; __DATA__ Original Header Text Invoice ID Company Name 1 SEBASTIAN COMMUNICATIONS 2 MASQUE SOUND 3 SEALEVEL SYSTEMS 4 MASSTECH, INC 5 SE INTERNATIONAL 6 SOUTHEAST SERVO, LLC 7 SEALEVEL SYSTEMS, INC. 8 MASTERBILT #### ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,