【问题标题】:Separate single text file into multiple files based on certain pattern根据特定模式将单个文本文件分成多个文件
【发布时间】:2012-06-03 03:17:03
【问题描述】:

假设我有以下文件:(Song.txt)

Song one
bla bla bla bla 
bla bla bla bla bla
Song two
yaya ya yaa 
blaaa bla bla blaaaaa
Song three
bla bla bla

我想把这个文件分成三个文件,如下所示:

第一个文件名应该是 Song_1.txt

Song One
bla bla bla bla 
bla bla bla bla bla

第二个文件名应该是 Song_2.txt

Song two
yaya ya yaa 
blaaa bla bla blaaaaa

第三个文件名应该是 Song_3.txt

Song three
bla bla bla

如何使用 awk、grep、perl、python 和/或任何可用的基于 unix 的工具和语言来做到这一点?

【问题讨论】:

    标签: python perl unix awk grep


    【解决方案1】:

    csplit 可用于使用正则表达式拆分文本文件。

    【讨论】:

      【解决方案2】:
      csplit Song.txt --elide-empty-files --prefix=Song_ --suffix-format='%1d.txt' '/Song one/' '/Song two/' '/Song three/'
      

      csplit Song.txt -z -f Song_ -b '%1d.txt' '/Song one/' '/Song two/' '/Song three/'
      

      【讨论】:

        【解决方案3】:

        这应该会有所帮助 -

        gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt
        

        测试:

        [jaypal:~/Temp] cat Song.txt 
        Song one
        bla bla bla bla 
        bla bla bla bla bla
        Song two
        yaya ya yaa 
        blaaa bla bla blaaaaa
        Song three
        bla bla bla
        
        [jaypal:~/Temp] gawk -v RS="Song" 'NF{ print RS$0 > "Song_"++n".txt" }' Song.txt
        
        [jaypal:~/Temp] ls -l S*
        -rw-r--r--  1 jaypalsingh  staff  113 28 May 17:55 Song.txt
        -rw-r--r--  1 jaypalsingh  staff   47 28 May 18:06 Song_1.txt
        -rw-r--r--  1 jaypalsingh  staff   45 28 May 18:06 Song_2.txt
        -rw-r--r--  1 jaypalsingh  staff   24 28 May 18:06 Song_3.txt
        
        [jaypal:~/Temp] cat Song_1.txt 
        Song one
        bla bla bla bla 
        bla bla bla bla bla
        
        [jaypal:~/Temp] cat Song_2.txt 
        Song two
        yaya ya yaa 
        blaaa bla bla blaaaaa
        
        [jaypal:~/Temp] 
        

        【讨论】:

        • :y 这更好..我会试着理解它是如何写的非常感谢
        • @user1421408 不客气。我们在这里所做的是将记录分隔符设置为Song。这将所有歌曲分开。 $0 标记其他所有内容。由于您在个人文件中需要单词“Song”,我们输出RS $0 而不是写单词“Song”。 ++n 确保我们将每条记录写入一个以数字递增的新文件。 NF 确保我们不会将第一个文件写成 Song。希望这会有所帮助!
        猜你喜欢
        • 1970-01-01
        • 2011-12-25
        • 1970-01-01
        • 2018-04-08
        • 2012-03-17
        • 1970-01-01
        • 2018-06-16
        • 2021-03-26
        相关资源
        最近更新 更多