Divide um arquivo por duas novas linhas consecutivas

1

Eu tenho um arquivo de texto como este

1. some topic
a
20p
ID: 20


2. something topic
another
here
there
ID: 30


3. ...
here
come
another
ID: 40

Eles são separados por duas novas linhas. Como eu poderia dividir isso em arquivos separados? A divisão também pode usar ID , mas a maioria dos exemplos que vi até agora usam padrões como o cabeçalho de um novo arquivo. Qualquer coisa usando python perl ou um script de shell é bom.

    
por yumyai 22.11.2011 / 21:48

2 respostas

2

É um autômato simples:

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

Você pode alternar arquivos ou fazer o que quiser na linha "alternar arquivo aqui".

    
por 22.11.2011 / 22:18
1

Usando o 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
    
por 23.11.2011 / 12:15