有没有办法将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 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