Solved

work on data in text file

Posted on 2011-02-19
7
296 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
Comment Utility
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
Comment Utility
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
Comment Utility
Any updates on this project.
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 
LVL 16

Accepted Solution

by:
sjklein42 earned 500 total points
Comment Utility
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
Comment Utility
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
Comment Utility

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

Author Comment

by:dpk_wal
Comment Utility
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

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…
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
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…

772 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

11 Experts available now in Live!

Get 1:1 Help Now