dpk_wal
asked on
further modify data in text file
I have a text file with which I want to perform some replace operations.
Here's the example [have sort data based on protocol/port/IP basis with a new line character seperating two sorts]:
disposition protocol source destination operator port-range
permit tcp host_10_13_41_100 host_10_14_5_252 eq 445
permit tcp host_10_13_41_120 host_10_14_5_252 eq 445
permit tcp 10_36_16_0 21 host_10_13_5_129 eq 445
permit tcp 10_36_32_0 21 host_10_13_5_129 eq 445
permit tcp 10_40_16_0 21 host_10_13_5_129 eq 445
permit tcp 10_40_32_0 21 host_10_13_5_129 eq 445
permit tcp 10_0_0_0 8 host_10_13_5_106 range 1024 65535
permit tcp 10_0_0_0 8 host_10_13_5_107 range 1024 65535
permit tcp 10_0_0_0 8 host_10_13_5_11 range 1024 65535
1. For every unique protocol/port[-range] need a line as below:
application protocol_port[_range] protocol <protocol> destination-port <port><[-range]>
From example above, output would look like:
application tcp_445 protocol tcp destination-port 445
application tcp_1024_65535 protocol tcp destination-port 1024-65535
2. Replace lines with mask with underscore from <tab> [these can be part of either source or destination or be present in both]:
10_36_16_0 21
10_36_32_0 21
10_0_0_0 8
To:
10_36_16_0_21
10_36_32_0_21
10_0_0_0_8
3. Next for every unique source and destination:
protocol_port[_range] source [ <source> <source> ] destination [ <destination> <destination> ] application protocol_port[_range]
From example above the lines would look like:
tcp_445 source [ host_10_13_41_100 host_10_13_41_120 ] destination host_10_14_5_252 application tcp_445
tcp_445 source [ 10_36_16_0_21 10_36_32_0_21 ] destination host_10_13_5_129 application tcp_445
tcp_1024_65535 source 10_0_0_0_8 destination [ host_10_13_5_106 host_10_13_5_107 host_10_13_5_11 ] application tcp_1024_65535
Thank you for your help in advance.
Here's the example [have sort data based on protocol/port/IP basis with a new line character seperating two sorts]:
disposition protocol source destination operator port-range
permit tcp host_10_13_41_100 host_10_14_5_252 eq 445
permit tcp host_10_13_41_120 host_10_14_5_252 eq 445
permit tcp 10_36_16_0 21 host_10_13_5_129 eq 445
permit tcp 10_36_32_0 21 host_10_13_5_129 eq 445
permit tcp 10_40_16_0 21 host_10_13_5_129 eq 445
permit tcp 10_40_32_0 21 host_10_13_5_129 eq 445
permit tcp 10_0_0_0 8 host_10_13_5_106 range 1024 65535
permit tcp 10_0_0_0 8 host_10_13_5_107 range 1024 65535
permit tcp 10_0_0_0 8 host_10_13_5_11 range 1024 65535
1. For every unique protocol/port[-range] need a line as below:
application protocol_port[_range] protocol <protocol> destination-port <port><[-range]>
From example above, output would look like:
application tcp_445 protocol tcp destination-port 445
application tcp_1024_65535 protocol tcp destination-port 1024-65535
2. Replace lines with mask with underscore from <tab> [these can be part of either source or destination or be present in both]:
10_36_16_0 21
10_36_32_0 21
10_0_0_0 8
To:
10_36_16_0_21
10_36_32_0_21
10_0_0_0_8
3. Next for every unique source and destination:
protocol_port[_range] source [ <source> <source> ] destination [ <destination> <destination> ] application protocol_port[_range]
From example above the lines would look like:
tcp_445 source [ host_10_13_41_100 host_10_13_41_120 ] destination host_10_14_5_252 application tcp_445
tcp_445 source [ 10_36_16_0_21 10_36_32_0_21 ] destination host_10_13_5_129 application tcp_445
tcp_1024_65535 source 10_0_0_0_8 destination [ host_10_13_5_106 host_10_13_5_107 host_10_13_5_11 ] application tcp_1024_65535
Thank you for your help in advance.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Looked at solution again; we are appending the data at the bottom of the script; can we read the data from a file instead; I have 20k lines in the text file.
Sure. Just change line 7 ("while (<DATA>) {") to:
my $fil = shift or die "Usage: $0 input_file\n";
open IN, $fil or die "could not open $fil: $!";
while (<IN>) {
Now the script takes the input file name as a command line argument.
my $fil = shift or die "Usage: $0 input_file\n";
open IN, $fil or die "could not open $fil: $!";
while (<IN>) {
Now the script takes the input file name as a command line argument.
ASKER
Not working exactly as I expected; but thank you for your effort.
Although, rereading, I don't see that you say you want the lines in #2 printed out. If that's the case just remove the print at line 27 (and they won't be printed).