Solved

work on data in text file

Posted on 2011-02-19
7
297 Views
Last Modified: 2012-05-11
Hi,

I have a 30,000 line text file from which I need to compile data.

I will use example,

say I have lines as below:

object-group network C
 network-object host 10.57.31.66
 network-object host 10.57.31.67
 network-object host 10.80.40.201
 network-object host 10.80.40.202
object-group network A
 network-object 10.14.60.0 255.255.252.0
 network-object 10.14.63.0 255.255.255.0
 network-object 10.14.64.0 255.255.255.0
object-group network B
 network-object host 10.13.5.116
 network-object host 10.13.5.117

I need to do following [order of steps is not important; final result is]:

 1. remove all occurance of network-object and object-group network; so the lines remains:
 C
 host 10.57.31.66
 host 10.57.31.67
 host 10.80.40.201
 host 10.80.40.202
 A
 10.14.60.0 255.255.252.0
 10.14.63.0 255.255.255.0
 10.14.64.0 255.255.255.0
 B
 host 10.13.5.116
 host 10.13.5.117
 2. Now transform all subnet masks to slash (/) notation [only output from object A shown below].
 Refer link http://www.mattwaddell.com/2008/08/26/slash-notation-for-subnet-masks-quick-reference/
  10.14.60.0 22
  10.14.63.0 24
  10.14.64.0 24
3. Give name as host_ip or subnet_mask and have lines read as:
host_10_57_31_66     10.57.31.66
host_10_57_31_67     10.57.31.67
host_10_80_40_201    10.80.40.201
host_10_80_40_202    10.80.40.202
10_14_60_0_22           10.14.60.0/22
10_14_63_0_24           10.14.63.0/24
10_14_64_0_24           10.14.64.0/24
host_10_13_5_116     10.13.5.116
host_10_13_5_117     10.13.5.117
4. Finally using host_ip and/or subnet_mask and club with name as below:
host_10_57_31_66     10.57.31.66
host_10_57_31_67     10.57.31.67
host_10_80_40_201    10.80.40.201
host_10_80_40_202    10.80.40.202
10_14_60_0_22           10.14.60.0/22
10_14_63_0_24           10.14.63.0/24
10_14_64_0_24           10.14.64.0/24
host_10_13_5_116     10.13.5.116
host_10_13_5_117     10.13.5.117

set C address host_10_57_31_66
set C address host_10_57_31_67
set C address host_10_80_40_201
set C address host_10_80_40_202
set A address 10_14_60_0_22       
set A address 10_14_63_0_24       
set A address 10_14_64_0_24       
set B address host_10_13_5_116
set B address host_10_13_5_117

Sorry for the long question.

Thank you for all the help.
0
Comment
Question by:dpk_wal
  • 4
  • 3
7 Comments
 
LVL 16

Expert Comment

by:sjklein42
ID: 34932627
Do you still need help with this?  It seems to overlap with your other project (:modify/sort data in text file").
0
 
LVL 32

Author Comment

by:dpk_wal
ID: 34935440
Yes, this overlaps only in the final part where I get address set with addresses.

Am expecting a new text file with possible more lines and hence requesting complete solution than just piece solutions.

This time I have use excel and text editors to replace/sort data; want an easier approach as it looks this effort would get replicated.

Thank you.
0
 
LVL 32

Author Comment

by:dpk_wal
ID: 34948775
Any updates on this project.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 16

Accepted Solution

by:
sjklein42 earned 500 total points
ID: 34953301
sub FlushIt()
{
	foreach $host (@hostNames)
	{
		if ( ! ( $host =~ /^host/ ) ) #  10.14.60.0 255.255.252.0
		{
			($ip,$mask) = split(/\s/,$host);
			($m1,$m2,$m3,$m4) = split(/\./,$mask);

			# transform subnet mask to slash (/) notation
			if    (( $m3 ==  240 ) && ( $m4 == 0  )) { $slashNum = 20; }
			elsif (( $m3 ==  248 ) && ( $m4 == 0  )) { $slashNum = 21; }
			elsif (( $m3 ==  252 ) && ( $m4 == 0  )) { $slashNum = 22; }
			elsif (( $m3 ==  254 ) && ( $m4 == 0  )) { $slashNum = 23; }
			elsif (( $m3 ==  255 ) && ( $m4 == 0  )) { $slashNum = 24; }
			elsif (( $m3 ==  255 ) && ( $m4 == 128)) { $slashNum = 25; }
			elsif (( $m3 ==  255 ) && ( $m4 == 192)) { $slashNum = 26; }
			elsif (( $m3 ==  255 ) && ( $m4 == 224)) { $slashNum = 27; }
			elsif (( $m3 ==  255 ) && ( $m4 == 240)) { $slashNum = 28; }
			elsif (( $m3 ==  255 ) && ( $m4 == 248)) { $slashNum = 29; }
			elsif (( $m3 ==  255 ) && ( $m4 == 252)) { $slashNum = 30; }

			# 10_14_63_0_24           10.14.63.0/24

			$ip2 = $ip;
			$ip2 =~ s/\./\_/g;

			$host = "$ip2\_$slashNum";
			print "$host\t$ip/$slashNum\n";


		}
		else		# host 10.80.40.201
		{
			# host_10_80_40_201    10.80.40.201

			$host =~ s/host\s+//; 
			$ip = $host;
			$host =~ s/\./\_/g; 
			$host = "host_$host";
			print "$host\t$ip\n";

		}

		push(@setCommands, "set $groupName address $host\n");
	}

	undef @hostNames;
}

while ( <> )
{
	s/[\r\n]//g;
	if ( /object-group network\s+/ ) { FlushIt(); $groupName = $'; }
	elsif ( /network-object\s+/ ) { push(@hostNames, $'); }
}
FlushIt();

print "\n";
print @setCommands;

Open in new window


object-group network C
 network-object host 10.57.31.66
 network-object host 10.57.31.67
 network-object host 10.80.40.201
 network-object host 10.80.40.202
object-group network A
 network-object 10.14.60.0 255.255.252.0
 network-object 10.14.63.0 255.255.255.0
 network-object 10.14.64.0 255.255.255.0
object-group network B
 network-object host 10.13.5.116
 network-object host 10.

Open in new window

c:\temp>perl foo.pl foo.txt
host_10_57_31_66        10.57.31.66
host_10_57_31_67        10.57.31.67
host_10_80_40_201       10.80.40.201
host_10_80_40_202       10.80.40.202
10_14_60_0_22   10.14.60.0/22
10_14_63_0_24   10.14.63.0/24
10_14_64_0_24   10.14.64.0/24
host_10_13_5_116        10.13.5.116
host_10_13_5_117        10.13.5.117

set C address host_10_57_31_66
set C address host_10_57_31_67
set C address host_10_80_40_201
set C address host_10_80_40_202
set A address 10_14_60_0_22
set A address 10_14_63_0_24
set A address 10_14_64_0_24
set B address host_10_13_5_116
set B address host_10_13_5_117

c:\temp>

Open in new window

0
 
LVL 32

Author Comment

by:dpk_wal
ID: 34957676
Thank you so much for working on this.
Am asking a favor here; can you also please look at two of my related questions to an earlier solution given by you.

Regards.
0
 
LVL 16

Expert Comment

by:sjklein42
ID: 34957733

Post the links here and I will take a look.
0
 
LVL 32

Author Comment

by:dpk_wal
ID: 34957750
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Email validation in proper way is  very important validation required in any web pages. This code is self explainable except that Regular Expression which I used for pattern matching. I originally published as a thread on my website : http://www…
I have been pestered over the years to produce and distribute regular data extracts, and often the request have explicitly requested the data be emailed as an Excel attachement; specifically Excel, as it appears: CSV files confuse (no Red or Green h…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

26 Experts available now in Live!

Get 1:1 Help Now