Frage

Ich habe eine ziemlich große Datei (150 Millionen Zeilen von 10 Zeichen). Ich brauche es in 150 Dateien von 2 Millionen Zeilen aufgeteilt, wobei jede Ausgangsleitung alternativ die ersten 5 Zeichen sein oder die letzten 5 Zeichen der Sourceleitung. Ich konnte dies in Perl tun ziemlich schnell, aber ich frage mich, ob es eine einfache Lösung mit bash war. Irgendwelche Ideen?

War es hilfreich?

Lösung

Hausaufgaben? : -)

Ich würde denken, dass ein einfaches Rohr mit sed (um jede Zeile in zwei Teile aufgeteilt) und Split (um die Dinge aufgeteilt in mehrere Dateien) würde ausreichen, um.

Der Mann Befehl ist dein Freund.


nach der Bestätigung wird hinzugefügt, dass es keine Hausaufgaben sind:

Wie wäre es

sed 's/\(.....\)\(.....\)/\1\n\2/' input_file | split -l 2000000 - out-prefix-

Andere Tipps

Ich denke, dass so etwas wie dies funktionieren könnte:

out_file=1
out_pairs=0
cat $in_file | while read line; do
    if [ $out_pairs -gt 1000000 ]; then
        out_file=$(($out_file + 1))
        out_pairs=0
    fi
    echo "${line%?????}" >> out${out_file}
    echo "${line#?????}" >> out${out_file}
    out_pairs=$(($out_pairs + 1))
done

Nicht sicher, ob es einfacher oder effizienter als Perl, though.

Die ersten fünf Zeichen jeder Zeile Variante unter der Annahme, dass die große Datei x.txt genannt, und unter der Annahme, es ist OK, Dateien im aktuellen Verzeichnis zu erstellen, mit Namen x.txt *:.

aufspalten -l 2000000 x.txt x.txt.out && (für Splitfile in x.txt.out *; tun outfile = "$ {} Splitfile .firstfive"; echo "$ Splitfile -> $ outfile", cut -c 1-5 "$ Splitfile"> "$ outfile"; done)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top