1

我有一个结构类似于下面的文件,只有更多部分:

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                                                        
4

2 回答 2

3

在每个 Unix 机器上的任何 shell 中使用任何 awk:

$ 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
于 2021-06-22T02:50:38.210 回答
2

您可以使用 csplit:

csplit -z -f 'SCN DD' Junction-Links.txt '/^\s*$/' '{*}'

虽然这会使文件命名为“SCN DD00”、“SCN DD01”、“SCN DD02”等。如果您有超过 100 个文件,您可以-n 3在输出文件中添加使用三位填充。

于 2021-06-21T13:36:57.187 回答