• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 311
  • Last Modified:

work on data in text file

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
dpk_wal
Asked:
dpk_wal
  • 4
  • 3
1 Solution
 
sjklein42Commented:
Do you still need help with this?  It seems to overlap with your other project (:modify/sort data in text file").
0
 
dpk_walAuthor Commented:
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
 
dpk_walAuthor Commented:
Any updates on this project.
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

 
sjklein42Commented:
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
 
dpk_walAuthor Commented:
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
 
sjklein42Commented:

Post the links here and I will take a look.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now