有没有办法将sed脚本的每个匹配结果分别提取到一个文件中?
Is there a way to extract each matching result of a sed script to a file each?
我的文件结构如下所示,只是包含更多部分:
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
目前,我正在使用以下包含 sed 函数的 bash 脚本将每个数据段从一个 SCN 提取到整个之间没有字符的行:
sed -n '/^SCN/,/^\s*$/p' LOG.TXT > Junction-Links.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 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 DD1251 的文件、SCN DD1271 的文件等)而不是将它们全部保存到一个组合文件中?
理想情况下输出应该是这样的:
- SCN DD1251.txt
- SCN DD1271.txt
- SCN DD1301.txt
- SCN DD1351.txt
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
你可以使用 csplit:
csplit -z -f 'SCN DD' Junction-Links.txt '/^\s*$/' '{*}'
尽管这会生成名为 'SCN DD00'、'SCN DD01'、'SCN DD02' 等的文件。如果
你有超过 100 个文件,你可以添加 -n 3
以使用三位数填充
在输出文件中。
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk '/^SCN/{close(out); out=" "".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
我的文件结构如下所示,只是包含更多部分:
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
目前,我正在使用以下包含 sed 函数的 bash 脚本将每个数据段从一个 SCN 提取到整个之间没有字符的行:
sed -n '/^SCN/,/^\s*$/p' LOG.TXT > Junction-Links.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 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 DD1251 的文件、SCN DD1271 的文件等)而不是将它们全部保存到一个组合文件中?
理想情况下输出应该是这样的:
- SCN DD1251.txt
- SCN DD1271.txt
- SCN DD1301.txt
- SCN DD1351.txt
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
你可以使用 csplit:
csplit -z -f 'SCN DD' Junction-Links.txt '/^\s*$/' '{*}'
尽管这会生成名为 'SCN DD00'、'SCN DD01'、'SCN DD02' 等的文件。如果
你有超过 100 个文件,你可以添加 -n 3
以使用三位数填充
在输出文件中。
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk '/^SCN/{close(out); out=" "".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