1

У меня есть текстовый файл, как это

1. some topic
a
20p
ID: 20


2. something topic
another
here
there
ID: 30


3. ...
here
come
another
ID: 40

Они разделены двумя новыми строками. Как я могу разбить это на отдельные файлы? Разделение может также использовать ID , но большинство примеров, которые я видел до сих пор, используют шаблоны в качестве заголовка нового файла. Все, что использует perl python или сценарий оболочки - это хорошо.

2 ответа2

2

Это простой автомат:

 #!/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

Вы можете переключать файлы или делать все, что вы хотите в строке "переключить файл здесь".

1

Используя 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .