Perl Sorting Help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl Sorting Help
# 1  
Old 02-12-2013
Perl Sorting Help

Hey guys,
I have started to learn perl recently because of a position I took. They want me to master perl and I've been reading books and practicing myself.
Basically I,m having my perl script run through a text pad and give the output in a special way


e.g
Code:
input 

deviceconfig {
  system {
    snmp-setting {
      snmp-system {
        location "VA";
        contact US;
        send-event-specific-traps yes;
      }
      access-setting {
        version {
          ll1 {
            snmp-community-string trap;
          }
        }
      }
    }

the output should be like this
Code:
set deviceconfig system snmp-setting snmp-system location "VA"
set deviceconfig system snmp-setting snmp-system contact US
set deviceconfig system snmp-setting snmp-system send-event-specific-traps yes
set deviceconfig system snmp-setting access-setting version ll1 snmp-community-string trap

so far I have
Code:
open (NAMES_FILE, "<input.txt")  or  die "Failed to read file : $! ";
my @not_sorted = <NAMES_FILE>;  # read entire file in the array
print @not_sorted;
close (NAMES_FILE);

so I am putting all the file into an array, but what I want to do is, I want it to paste everything before a bracket open and the statement after it. I would really appreciate some help.

Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.

Last edited by vbe; 02-12-2013 at 12:49 PM..
# 2  
Old 02-12-2013
You may either do this using vanilla Perl or make your life very simple by using a configuration file parser such as Config::Scoped. See CPAN for its documentation. Also check out other config parsers (although this one will do your job).

Since I am accessing the forum through my mobile, can't help you much. Sorry.
This User Gave Thanks to elixir_sinari For This Post:
# 3  
Old 02-12-2013
Hey, thanks a lot for the reply. I tried using Config::Scope and I just can't figure out how to set it so that it still comes in that format.

Im sorry, but i am not quite familiar with perl and am just a beginner.
# 4  
Old 02-12-2013
Without using any config parsers and with certain assumptions about your input data (based on the sample provided):
Code:
#!/usr/bin/perl
use strict;
use warnings;

open my($in_file), '<', '/path/to/inputfile'
or die "Could not open file: $!\n";

my @params = qw(set);

while(<$in_file>) {
 next if (/^\s+$|^\s*#/);
 if(/^\s*}\s*$/) { pop @params; next}
 my @tokens = split;
 if ($tokens[1] =~ /{/) { push @params, $tokens[0]; next }
 s/^[ \t]*|;.*$//g;
 print "@params $_";
}

close $in_file;


Last edited by elixir_sinari; 02-12-2013 at 11:30 PM..
This User Gave Thanks to elixir_sinari For This Post:
# 5  
Old 02-13-2013
Quote:
Originally Posted by elixir_sinari
Without using any config parsers and with certain assumptions about your input data (based on the sample provided):
Code:
#!/usr/bin/perl
use strict;
use warnings;

open my($in_file), '<', '/path/to/inputfile'
or die "Could not open file: $!\n";

my @params = qw(set);

while(<$in_file>) {
 next if (/^\s+$|^\s*#/);
 if(/^\s*}\s*$/) { pop @params; next}
 my @tokens = split;
 if ($tokens[1] =~ /{/) { push @params, $tokens[0]; next }
 s/^[ \t]*|;.*$//g;
 print "@params $_";
}

close $in_file;

Hey, Thanks a lot. That really did help. I'm currently in the process of learning perl and am putting all the effort I can.

Once again, Thank you!
# 6  
Old 02-21-2013
how about below perl?

Code:
my @arr;
while(<DATA>){
	chomp;
  if(/\{/){
	s/[ \{]//g;
	push @arr, $_;
  }
  elsif(/\}/){
	pop @arr;
  }
  else{
	my $pre = join(", ",@arr);
	print $pre, $_,"\n";
  }
}
__DATA__
deviceconfig {
  system {
    snmp-setting {
      snmp-system {
        location "VA";
        contact US;
        send-event-specific-traps yes;
      }
      access-setting {
        version {
          ll1 {
            snmp-community-string trap;
          }
        }
      }
    }

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sorting dates in Perl

I have a directory of backup files. named like this: ldap.data.04-06-2012.tar ldap.data.03-06-2012.tar ldap.data.02-06-2012.tar ldap.data.01-06-2012.tar ldap.data.31-05-2012.tar ldap.data.30-05-2012.tar ldap.data.29-05-2012.tar ldap.data.28-05-2012.tar ldap.data.27-05-2012.tar... (6 Replies)
Discussion started by: robsonde
6 Replies

2. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

3. Shell Programming and Scripting

Sorting a particular column in PERL

I have a file abc.txt which contains data in th following format abc,23 hgfh,87 tweg,89 jdfjn,74 I want to sort on the basis of column (the second one). It should be numerical sort. output should be abc,23 jdfjn,74 hgfh,87 tweg,89 I know how to do it in unix. I need a PERL code (1 Reply)
Discussion started by: centurion_13
1 Replies

4. Shell Programming and Scripting

perl sorting variables

Good morning!! Im trying to practice withe Perl and sorting variables is not going good at all! #!/usr/bin/perl $username = $ENV {'LOGNAME'}; print "Hello, $username\n"; I want to add sort and 'mail' and 'home'. This below is what I have came up with,but of course its not working. ... (5 Replies)
Discussion started by: bigben1220
5 Replies

5. Shell Programming and Scripting

Perl sorting

Hi, I have a file in this format: a b c d e a b c d e a b c d e i need perl script to sort 2nd column in alphabatical order The script i use is #!/usr/bin/perl my @words=<>; foreach(sort mysort @words) { print; (4 Replies)
Discussion started by: Learnerabc
4 Replies

6. Shell Programming and Scripting

perl array sorting

Hi All, I have an array in perl as @match = (201001,201002,201001,201002); I am trying to sort this array as @match = sort(@match); print "@match"; I dont see the output sorted any answers I also tried another way, but still the results are not sorted foreach my $match (sort { $a... (2 Replies)
Discussion started by: bsdeepu
2 Replies

7. Shell Programming and Scripting

Perl: sorting by string

I have an array full of string values that need to be sorted, but if a value starts with (regex) 0^ it should be at the beginning of the array. Otherwise the array should be sorted normally using ascii sort. Please help me create the sub to pass to the sort function. (7 Replies)
Discussion started by: dangral
7 Replies

8. Shell Programming and Scripting

PERL data - sorting

Hello, I have a page where multiple fields and their values are displayed. But I am able to sort only a few fields. When I looked into the issue, it is seen that the for each row of info , an unique id is generated and id.txt is generated and saved. Only those fields which are inside that id.txt... (3 Replies)
Discussion started by: eagercyber
3 Replies

9. Shell Programming and Scripting

perl sorting

I have many files that I need to sort each week. I know how to do in Unix, but for this task it appears best to do native inside an existing perl program. So, simplified, I have a file similar to the following: Joe_________12_Main_St__A001________LX Benny_______5_Spring____A002________LX... (5 Replies)
Discussion started by: joeyg
5 Replies

10. Shell Programming and Scripting

Perl: sorting files by whats in'em

i'm halfway into my script and realize i may need to use an associative array (a hash, i guess they are called in Perl). i'm fairly new to Perl and don't know how to use them correctly. i have some files in a directory. each file contains a number in a specific place in it's header. what i would... (4 Replies)
Discussion started by: quantumechanix
4 Replies
Login or Register to Ask a Question