mentosan Posted June 30, 2008 Posted June 30, 2008 Hi guys ! I'm having two text files: A.txt and B.txt. In A.txt file I'm having string1 which must be replaced with string2 from the B.txt file. Also the string2 from A will be replaced with a string from B in array, and so on. The script must find in the B file corresponding string for A to be replaced. I want to build such a script which will create another C file with the result. Can you help me with example or a code for this ? Thank you for the answer
weaponx Posted June 30, 2008 Posted June 30, 2008 First you need to read in the files to an array using FileRead + StringSplit or _FileReadToArray. Next you create a new array for the 3rd file. From there you can use FileOpen + FileWriteLine or _FileWriteFromArray to output the new file.
mentosan Posted June 30, 2008 Author Posted June 30, 2008 And how do I search in the file ? To be more specific : I have one file containing list of IP's and the other file containing assigned MAC addresses for each IP. I need the script to generate the 3rd file in the same format as first file (with IP's) but instead of IP to have the MAC. Here is a fragment from the file with IPs: HA#show ip mobile binding Mobility Binding List: Total 60 172.18.6.15: Care-of Addr 172.18.3.21, Src Addr 172.18.3.21 Lifetime granted 01:00:00 (3600), remaining 00:48:39 Flags sbdmG-T-, Identification CC0F35FE.5F756C16 Tunnel1 src 172.18.3.5 dest 172.18.3.21 reverse-allowed Routing Options - (G)GRE (T)Reverse-tunnel 172.18.6.14: Care-of Addr 172.18.3.21, Src Addr 172.18.3.21 Lifetime granted 01:00:00 (3600), remaining 00:51:16 Flags sbdmG-T-, Identification CC0F369B.F7C3BE6B Tunnel1 src 172.18.3.5 dest 172.18.3.21 reverse-allowed Routing Options - (G)GRE (T)Reverse-tunnel 172.18.6.12: Care-of Addr 172.18.3.21, Src Addr 172.18.3.21 Lifetime granted 01:00:00 (3600), remaining 00:48:27 Flags sbdmG-T-, Identification CC0F35F2.BE3DD5C0 Tunnel1 src 172.18.3.5 dest 172.18.3.21 reverse-allowed A fragment from the file with which MAC for is for IP: host MSS11 { hardware ethernet 00:19:CB:70:24:B5; fixed-address 172.18.6.11; } host MSS12 { hardware ethernet 00:19:CB:25:42:11; fixed-address 172.18.6.12; } host MSS13 { hardware ethernet 00:19:CB:3A:71:83; fixed-address 172.18.6.13; } host MSS14 { hardware ethernet 00:19:CB:14:92:B1; fixed-address 172.18.6.14; } host MSS15 {
weaponx Posted June 30, 2008 Posted June 30, 2008 ;Read in file containing only IP addresses $file1 = FileRead("file1.txt") ;Read in file containing IP addresses and associated MAC addresses $file2 = FileRead("file2.txt") $file3 = $file1 ;Retrieve all IP addresses from File 1 $array1 = StringRegExp($file1, "\d+\.\d+\.\d+\.\d+",3) For $X = 0 to Ubound($array1)-1 ConsoleWrite("["&$X&"]: " & $array1[$X] & @CRLF) ;Retrieve MAC address associated with IP address $match = "hardware ethernet (.*);" & @CRLF & "fixed-address " & $array1[$X] & ";" $result = StringRegExp($file2, $match,3) If NOT @ERROR Then For $Y = 0 to Ubound($result)-1 ConsoleWrite("["&$Y&"]: " & $result[$Y] & @CRLF) Next ;Perform replacement $file3 = StringReplace($file3, $array1[$X], $result[0]) Else ConsoleWrite("No Match" & @CRLF) EndIf Next $handle = FileOpen("file3.txt", 2) FileWrite($handle,$file3) FileClose($handle)
mentosan Posted June 30, 2008 Author Posted June 30, 2008 Thank you very much. It is a long process of execution - due to my long txt files, but it looks that is working. For once, at the end I will do a double-check.
weaponx Posted June 30, 2008 Posted June 30, 2008 Thank you very much. It is a long process of execution - due to my long txt files, but it looks that is working. For once, at the end I will do a double-check. It probably will be slow with large files. You can cut back some time by removing: $file3 = $file1 Change: $file3 = StringReplace($file3, $array1[$X], $result[0]) to $file1 = StringReplace($file1, $array1[$X], $result[0]) Change: FileWrite($handle,$file3) to FileWrite($handle,$file1)
mentosan Posted July 1, 2008 Author Posted July 1, 2008 (edited) I want to delete from file3.txt the following lines, of this kind :Care-of Addr 172.18.3.21, Src Addr 172.18.3.21 Lifetime granted 01:00:00 (3600), remaining 00:48:39 Flags sbdmG-T-, Identification CC0F35FE.5F756C16 Tunnel1 src 172.18.3.5 dest 172.18.3.21 reverse-allowed Routing Options - (G)GRE (T)Reverse-tunnelShall I use _FileWriteToLine ? Or how would you do that ? Edited July 1, 2008 by mentosan
mentosan Posted July 1, 2008 Author Posted July 1, 2008 MR. WeaponX, can you help me with this last wish ?
weaponx Posted July 1, 2008 Posted July 1, 2008 MR. WeaponX, can you help me with this last wish ? Wouldn't that just leave you with: HA#show ip mobile binding Mobility Binding List: Total 60 00:19:CB:25:42:XX: 00:19:CB:14:92:B1: 00:19:CB:25:42:11:
mentosan Posted July 1, 2008 Author Posted July 1, 2008 Wouldn't that just leave you with: HA#show ip mobile binding Mobility Binding List: Total 60 00:19:CB:25:42:XX: 00:19:CB:14:92:B1: 00:19:CB:25:42:11: What is the code to have such a result ? Thx
weaponx Posted July 1, 2008 Posted July 1, 2008 This is untested but should work: ;Read in file containing only IP addresses $file1 = FileRead("file1.txt") ;Read in file containing IP addresses and associated MAC addresses $file2 = FileRead("file2.txt") $handle = FileOpen("file3.txt", 2) ;Retrieve all IP addresses from File 1 $array1 = StringRegExp($file1, "\d+\.\d+\.\d+\.\d+",3) For $X = 0 to Ubound($array1)-1 ConsoleWrite("["&$X&"]: " & $array1[$X] & @CRLF) ;Retrieve MAC address associated with IP address $match = "hardware ethernet (.*);" & @CRLF & "fixed-address " & $array1[$X] & ";" $result = StringRegExp($file2, $match,3) If NOT @ERROR Then ;Write MAC Address to file FileWriteLine($handle, $result[0]) Else ConsoleWrite("No Match" & @CRLF) EndIf Next
mentosan Posted July 2, 2008 Author Posted July 2, 2008 (edited) It will work with this result : 00:19:CB:25:42:XX: 00:19:CB:14:92:B1: 00:19:CB:25:42:11: I want to include the "header" as well : HA#show ip mobile binding Mobility Binding List: Total 60 Edited July 2, 2008 by mentosan
mentosan Posted July 2, 2008 Author Posted July 2, 2008 I have found a useful tool which does exactly what WeaponX posted, with very fast execution time - less than a minute. It is called usfutlight. Still, I prefer to use the code sent by weaponX if there is a solution not to cut the header (as mentioned in previous post)
weaponx Posted July 2, 2008 Posted July 2, 2008 (edited) We don't really have a metric to define the header. Is it always the same?: HA#show ip mobile binding Mobility Binding List: Total 60 Is it always three lines? If it is you can do this: expandcollapse popup;Read in file containing only IP addresses $file1 = FileRead("file1.txt") ;Read in file containing IP addresses and associated MAC addresses $file2 = FileRead("file2.txt") ;Open file for writing $handle = FileOpen("file3.txt", 2) ;Grab first three lines (header) $result = StringRegExp($file1, "\A(.*\r\n.*\r\n.*\r\n)", 3) #cs For $Y = 0 to Ubound($result)-1 ConsoleWrite("["&$Y&"]: " & $result[$Y] & @CRLF) Next #ce ;Write header to file FileWrite($handle,$result[0]) ;Retrieve all IP addresses from File 1 $array1 = StringRegExp($file1, "\d+\.\d+\.\d+\.\d+",3) For $X = 0 to Ubound($array1)-1 ConsoleWrite("["&$X&"]: " & $array1[$X] & @CRLF) ;Retrieve MAC address associated with IP address $match = "hardware ethernet (.*);" & @CRLF & "fixed-address " & $array1[$X] & ";" $result = StringRegExp($file2, $match,3) If NOT @ERROR Then #cs For $Y = 0 to Ubound($result)-1 ConsoleWrite("["&$Y&"]: " & $result[$Y] & @CRLF) Next #ce ;Write MAC address to file FileWriteLine($handle,$result[0]) Else ConsoleWrite("No Match" & @CRLF) EndIf Next FileClose($handle) Edited July 2, 2008 by weaponx
mentosan Posted July 2, 2008 Author Posted July 2, 2008 In fact there are five lines, always. But it must be shown with every iteration, because the time is displayed. So it should look like this : HA#show calendar 12:00:07 EET Fri Jun 27 2008 HA#show ip mobile binding Mobility Binding List: Total 3 00:19:CB:25:42:XX: 00:19:CB:14:92:B1: 00:19:CB:25:42:11: HA#show calendar 12:01:07 EET Fri Jun 27 2008 HA#show ip mobile binding Mobility Binding List: Total 3 00:19:CB:25:XX:ZZ: 00:19:CB:14:YY:YY: 00:19:CB:25:ZZ:ZZ: not : HA#show calendar 12:00:07 EET Fri Jun 27 2008 HA#show ip mobile binding 00:19:CB:25:42:XX: 00:19:CB:14:92:B1: 00:19:CB:25:42:11: 00:19:CB:25:XX:ZZ: 00:19:CB:14:YY:YY: 00:19:CB:25:ZZ:ZZ:
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now