Sponsored Content
Full Discussion: Perl array formatting
Top Forums Shell Programming and Scripting Perl array formatting Post 302970729 by rangarasan on Monday 11th of April 2016 11:28:17 AM
Old 04-11-2016
Tim,

How about this?

Code:
#! /usr/bin/perl

use strict;
use warnings;

my $file = 'input_file'; ## Change you input file name
my %info = ();
my %ports = ();

if(open(IFILE, "<", $file)) {

        while (<IFILE>) {
                my $line = $_;
                chomp($line);
                my ($port,$c,$l) = split(/,/, $line);
                my @list = split(/;/,$l);

                foreach my $i (@list) {
                        $info{$i}{$port} = $c;
                }
                $ports{$port}++;
        }
        close(IFILE);

        ## Display header
        print "\t", join("\t\t", sort keys %ports), "\n";

        ## Display body
        foreach my $i (sort {$a <=> $b} keys %info) {
                print $i, "\t";
                my $str='';
                foreach my $p (sort keys %ports) {
                        if($str) {
                                $str = join("\t", $str, $info{$i}{$p} || "\t");
                        } else {
                                $str = $info{$i}{$p} || "\t";
                        }
                }
                print $str, "\n";
        }
} else {
        print "Error: Unable to open $file\n";
}


Output that I got:

Code:
        Port1           Port2           Port3           Port4           Port5
1                                                                       circuit7
2       circuit3
3                                                       circuit4
4       circuit3
5                                       circuit2
6                       circuit1
7                                                                       circuit7
8                                                                       circuit7
9                       circuit1
10                                                      circuit4
11                                                      circuit4
12                                      circuit2

Cheers!
Ranga
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Array Retrieval Formatting

I have a shell script (Solaris v8 ksh) loading an array from a flat file. An exaple of that flat file is below. It contains white-spaces, and carrage returns. When I try to load the first line as a variable, it (the variable) shows up as the first field not the first line. How do you arrange an... (9 Replies)
Discussion started by: gozer13
9 Replies

2. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies

3. Shell Programming and Scripting

perl -write values in a file to @array in perl

Hi can anyone suggest me how to write a file containing values,... say 19 20 21 22 .. 40 to an array @array = (19, 20, ... 40) -- Thanks (27 Replies)
Discussion started by: meghana
27 Replies

4. Shell Programming and Scripting

Perl grep array against array

Hi, Is there any way I can grep an array against another array? Basically here's what I need to do. There will be an array containing some fixed texts and I have to check whether some files contain these lines. Reading the same files over and over again for each different pattern doesnt seem... (1 Reply)
Discussion started by: King Nothing
1 Replies

5. Shell Programming and Scripting

perl, put one array into many array when field is equal to sth

Hi Everyone, #!/usr/bin/perl use strict; use warnings; my @test=("a;b;qqq;c;d","a;b;ggg;c;d","a;b;qqq;c;d"); would like to split the @test array into two array: @test1=(("a;b;qqq;c;d","a;b;qqq;c;d"); and @test2=("a;b;ggg;c;d"); means search for 3rd filed. Thanks find the... (0 Replies)
Discussion started by: jimmy_y
0 Replies

6. Shell Programming and Scripting

Array in Perl - Detect several file to be in one array

Hi everyone I have one question about using array in perl. let say I have several log file in one folder.. example test1.log test2.log test3.log and the list goes on.. how to make an array for this file? It suppose to detect log file in the current directory and all the log file will... (3 Replies)
Discussion started by: sayachop
3 Replies

7. Shell Programming and Scripting

PERL : Read an array and write to another array with intial string pattern checks

I have an array and two variables as below, I need to check if $datevar is present in $filename. If so, i need to replace $filename with the values in the array. I need the output inside an ARRAY How can this be done. Any help will be appreciated. Thanks in advance. (2 Replies)
Discussion started by: irudayaraj
2 Replies

8. 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

9. Shell Programming and Scripting

Perl formatting.

I have a file which has following data: And I want the following out of it: So basically I want only the first four command separated fields and strip off the rest. How do I do it in perl? I want only perl code and no shell code. I can split it and try to do something, but... (7 Replies)
Discussion started by: som.nitk
7 Replies

10. UNIX for Dummies Questions & Answers

Formatting Array Output

Hello All, Q1) I have the below code but when the email was sent out all lines are merged and coming out as a single line though my printf statement has newline "\n", How do i avoid that? Q2) In my second IF statement when i introduced the backslash "\" for continuation of a line or command, i... (10 Replies)
Discussion started by: Ariean
10 Replies
Test::Class::Load(3pm)					User Contributed Perl Documentation				    Test::Class::Load(3pm)

NAME
Test::Class::Load - Load "Test::Class" classes automatically. VERSION
Version 0.02 SYNOPSIS
use Test::Class::Load qw(t/tests t/lib); Test::Class->runtests; EXPORT
None. DESCRIPTION
"Test::Class" typically uses a helper script to load the test classes. It often looks something like this: #!/usr/bin/perl -T use strict; use warnings; use lib 't/tests'; use MyTest::Foo; use MyTest::Foo::Bar; use MyTest::Foo::Baz; Test::Class->runtests; This causes a problem, though. When you're writing a test class, it's easy to forget to add it to the helper script. Then you run your huge test suite and see that all tests pass, even though you don't notice that it didn't run your new test class. Or you delete a test class and you forget to remove it from the helper script. "Test::Class::Load" automatically finds and loads your test classes for you. There is no longer a need to list them individually. BASIC USAGE
Using "Test::Class::Load" is as simple as this: #!/usr/bin/perl -T use strict; use warnings; use Test::Class::Load 't/tests'; Test::Class->runtests; That will search through all files in the "t/tests" directory and automatically load anything which ends in ".pm". You should only put test classes in those directories. If you have test classes in more than one directory, that's OK. Just list all of them in the import list. use Test::Class::Load qw< t/customer t/order t/inventory >; Test::Class->runtests; ADVANCED USAGE
Here's some examples of advanced usage of "Test::Class::Load". FILTER LOADED CLASSES You can redefine the filtering criteria, that is, decide what classes are picked up and what others are not. You do this simply by subclassing "Test::Class::Load" overriding the "is_test_class()" method. You might want to do this to only load modules which inherit from "Test::Class", or anything else for that matter. is_test_class $is_test_class = $class->is_test_class( $file, $directory ) Returns true if $file in $directory should be considered a test class and be loaded by Test::Class::Load. The default filter simply returns true if $file ends with ".pm" For example: use strict; use warnings; package My::Loader; use base qw( Test::Class::Load ); # Overriding this selects what test classes # are considered by T::C::Load sub is_test_class { my ( $class, $file, $dir ) = @_; # return unless it's a .pm (the default) return unless $class->SUPER:is_test_class( $file, $dir ); # and only allow .pm files with "Good" in their filename return $file =~ m{Good}; } 1; CUSTOMIZING TEST RUNS One problem with this style of testing is that you run all of the tests every time you need to test something. If you want to run only one test class, it's problematic. The easy way to do this is to change your helper script by deleting the "runtests" call: #!/usr/bin/perl -T use strict; use warnings; use Test::Class::Load 't/tests'; Then, just make sure that all of your test classes inherit from your own base class which runs the tests for you. It might looks something like this: package My::Test::Class; use strict; use warnings; use base 'Test::Class'; INIT { Test::Class->runtests } # here's the magic! 1; Then you can run an individual test class by using the "prove" utility, tell it the directory of the test classes and the name of the test package you wish to run: prove -lv -It/tests Some::Test::Class You can even automate this by binding it to a key in "vim": noremap ,t :!prove -lv -It/tests %<CR> Then you can just type ",t" ('comma', 'tee') and it will run the tests for your test class or the tests for your test script (if you're using a traditional "Test::More" style script). Of course, you can still run your helper script with "prove", "make test" or "./Build test" to run all of your test classes. If you do that, you'll have to make sure that the "-I" switches point to your test class directories. SECURITY
"Test::Class::Load" is taint safe. Because we're reading the class names from the directory structure, they're marked as tainted when running under taint mode. We use the following ultra-paranoid bit of code to untaint them. Please file a bug report if this is too restrictive. my ($package) = $_package =~ /^([[:word:]]+(?:::[[:word:]]+)*)$/; AUTHOR
Curtis "Ovid" Poe, "<ovid@cpan.org>" BUGS
Please report any bugs or feature requests to "bug-test-class-load@rt.cpan.org", or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Class-Load <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Class-Load>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. ACKNOWLEDGMENTS
Thanks to David Wheeler for the idea and Adrian Howard for "Test::Class". COPYRIGHT &; LICENSE Copyright 2006 Curtis "Ovid" Poe, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.14.2 2012-06-27 Test::Class::Load(3pm)
All times are GMT -4. The time now is 02:41 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy