通过两个连续的换行符来分割文件

通过两个连续的换行符来分割文件

我有像这样的文本文件

1. some topic
a
20p
ID: 20


2. something topic
another
here
there
ID: 30


3. ...
here
come
another
ID: 40

它们由两个换行符分隔。我该如何将其拆分为单独的文件?拆分ID也可以使用,但到目前为止我看到的大多数示例都使用模式作为新文件的标题。使用 perl python 或 shell 脚本的任何方法都可以。

答案1

它是简单的自动机:

 #!/bin/sh

 state=text

 cat | while read line; do

    if [ "$state" == "text" ]; then
        if [ "$line" == "" ]; then
            state="oneline"
        fi
    elif [ "$state" == "oneline" ]; then
        if [ "$line" == "" ]; then
            state="twolines"
        else
            state="text"
        fi
    else
        echo "switch file here"
        state="text"
    fi

    echo $line

 done

您可以在“在此处切换文件”上切换文件或执行任何您想做的事情。

答案2

使用 Ruby:

IO.read("somefile.txt").strip.split("\n\n\n").each_with_index do |e, i|
  z = e.split("\n", 2)
  next unless z.size == 2
  File.open("#{i}-#{z[0]}.txt", "w") { |f| f.write(z[1]) }
end

相关内容