[Shell] Datei in mehrere Dateien unterteilen nach bestimmtem Muster

Paula

Erfahrenes Mitglied
Einen wunderschönen,

ich habe eine relativ große Datei, die ich gerne ich mehrere kleinere Dateien unterteilen möchte. Der Befehl split alleine hilft mir dabei nicht, denn zusammenhängende Datensätze in der Datei sollen nicht unterbrochen werden. Die Datei ist wie folgt aufgebaut:
Code:
sdfasdf
asdfasdfdsf
dsfasdfsdf

sadfsdafd
dfdfdf

dfdf
dfdfdf4wf
feefeffsf
sefsefesfesfsef

sefefsf
sefef
Also ein neuer Datensatz beginnt immer nach einem \n\n. Wie kann ich kleinere Dateien erstellen, die immer nach einem Datensatz enden? Die Dateien sollen ~5 MB groß sein. Sprich maximal 5 MB oder ein paar KB mehr, falls bei genau 5 MB der Datensatz noch nicht fertig ist.


Danke für eure Hilfe und Gruß
 
Hallo,

schau doch mal:

Bash:
#! /bin/bash

infile="test.txt"   # input file
split_size=5000     # split size in bytes

gawk -v split_size=$split_size '{
    if (byte_count == 0)
        out = sprintf("%s%d%s", "/bin/cat > out", file_count, ".txt");
    else
        out = sprintf("%s%d%s", "/bin/cat >> out", file_count, ".txt");
    print $0 | out;

    byte_count += length($0);
    if ((byte_count > split_size) && ($0 == "")) {
        output = sprintf("Write command was: %s, %d bytes written", 
                         out,
                         byte_count);
        print output;
        file_count++;
        byte_count = 0;
    }
}' $infile

Gruß,
RedWing
 
Zurück