I have a file structured like the one below, only with more sections:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
SCN DD1301 At Glasgow Road - Argyll Road - Cart Street
Modified 27-JUN-16 11:45 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 A DD1271 T
B
C
D
SCN DD1351 At Kilbowie Road - Chalmers Street
Modified 9-FEB-21 08:57 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A DD1251 D
DD1251 B
C
SCN DD1451 At Kilbowie Road - Montrose Street
Modified 9-FEB-21 08:58 By BDAVIDSON
Type CR
Region WC Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A
B
C
SCN DD1601 At Kilbowie Road - Thomson Street 3G
Modified 9-FEB-21 08:59 By BDAVIDSON
Type CR
Region WV Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A
B
C
D
SCN DD1621 At Argyll Road - Stanford Street 3G
Modified 9-FEB-21 08:59 By BDAVIDSON
Type CR
Region AS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
B
C
D
Currently, I am using the following bash script containing a sed function to pull out each section of data from one SCN to the line of no characters between entires:
sed -n '/^SCN/,/^\s*$/p' LOG.TXT > Junction-Links.txt
This produces the following output:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
My question is, is it possible to save each matching pattern to a separate file (i.e a file for SCN DD1251, a file for SCN DD1271 etc.) rather than saving them all into one combined file?
Ideally the output would be like so:
With SCN DD1251.txt simply containing the following:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
Using any awk in any shell on every Unix box:
$ awk '/^SCN/{close(out); out=$1" "$2".txt"} {print > out}' file
$ head SCN*
==> SCN DD1251.txt <==
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
==> SCN DD1271.txt <==
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
==> SCN DD1301.txt <==
SCN DD1301 At Glasgow Road - Argyll Road - Cart Street
Modified 27-JUN-16 11:45 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 A DD1271 T
B
C
D
==> SCN DD1351.txt <==
SCN DD1351 At Kilbowie Road - Chalmers Street
Modified 9-FEB-21 08:57 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A DD1251 D
DD1251 B
C
==> SCN DD1451.txt <==
SCN DD1451 At Kilbowie Road - Montrose Street
Modified 9-FEB-21 08:58 By BDAVIDSON
Type CR
Region WC Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A
B
C
==> SCN DD1601.txt <==
SCN DD1601 At Kilbowie Road - Thomson Street 3G
Modified 9-FEB-21 08:59 By BDAVIDSON
Type CR
Region WV Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
A
B
C
D
==> SCN DD1621.txt <==
SCN DD1621 At Argyll Road - Stanford Street 3G
Modified 9-FEB-21 08:59 By BDAVIDSON
Type CR
Region AS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
B
C
D