tqlam
January 20, 2009, 12:47pm
1
I need to sort input file as below to display as below:
input.txt
User: my_id
File: oracle/scripts/ssc/ssc_db_info
User: your_id
File: pkg_files/BWSwsrms/request
User: your_id
File: pkg_files/BWSwsco/checkConfig.sh
OUTPUT:
User: my_id
File: oracle/scripts/ssc/ssc_db_info
User: your_id
File: pkg_files/BWSwsrms/request
File: pkg_files/BWSwsco/checkConfig.sh
Thanks in advance for your help!!!
nawk -f tq.awk input.txt
tq.awk:
$1 == "User:" {u=$2;next}
{a = (u in a) ? a ORS $0 : $0}
END {
for(i in a)
print "User:" i ORS a ORS
}
input:
User: 123
File: oracle/scripts/ssc/ssc_db_info
User: 456
File: pkg_files/BWSwsrms/request
User: 123
File: pkg_files/BWSwsco/checkConfig.sh
User: 456
File: /usr/bin/perl
User: 456
File: /local/default
User: 123
File: /etc/default
output:
User: 123
File: oracle/scripts/ssc/ssc_db_info
File: pkg_files/BWSwsco/checkConfig.sh
File: /etc/default
User: 456
File: pkg_files/BWSwsrms/request
File: /usr/bin/perl
File: /local/default
code:
#!/usr/bin/perl
use strict;
undef $/;
open FH,"<a.txt";
my $str=<FH>;
my @tmp=split("\n",$str);
my $cnt=($#tmp+1)/2;
my %hash;
for (my $i=0;$i<=$cnt-1;$i++){
$hash{$tmp[2*$i]}.=(exists $hash{$tmp[2*$i]})?"\n".$tmp[2*$i+1]:$tmp[2*$i+1];
}
map {print $_,$hash{$_},"\n\n" } keys %hash;
tqlam
January 21, 2009, 9:32am
4
Thank you guys!!!
Both replied work great!!!