it-swarm.com.de

Teilen Sie den Dateiinhalt auf und fügen Sie Suffix und Präfix hinzu

Ich versuche 3 Dinge.
1 # Teilen Sie die Datei in kleine Stücke
2 # Beim Teilen muss am Anfang jeder geteilten Datei Text hinzugefügt werden. 3 # Ich muss dem Dateiende jeder geteilten Datei Text hinzufügen.

Ich habe eine Datei mit 2 GB, auf der ich Vorgänge ausführen muss. Hier ist der kleine Ausschnitt für ein Beispiel der Datei, die ich habe. Bitte teilen Sie diese Datei nach jeweils 10 Zeilen.
Beispiel für die Raw-Datei, für die Vorgänge ausgeführt werden müssen: https://drive.google.com/file/d/0BzQ6rtO2VN95c0YzclhySVZYNDQ/view?usp=sharing
Ich möchte jede geteilte Datei als PHP-Datei erstellen. Hier ist ein Beispiel für die PHP-Datei: https://drive.google.com/file/d/0BzQ6rtO2VN95ZjU1WXpjTElCaEE/view?usp=sharing
Ich brauche nur die neu aufgeteilten Dateien als PHP-Datei und sie sollten so aussehen:

<?php
$urls = array("tvproduction.agency
","http://tween.agency","http://twelve.agency","http://twenty1.agency
","http://twenty47.agency
","http://twentynine.agency
","http://twentyone.agency
","http://twentysenses.agency
","http://twentysix.agency
","http://twentyten.agency");
?>

Ich habe split ausprobiert, aber es wurde nur die Datei geteilt.

3
Jaffer Wilson

Obwohl das Frage völlig klar zu sein scheint, sind mir die Beispiele nicht völlig klar. Ich werde mich daher an die Beschreibung der Frage halten.

Teilen Sie eine Datei in gleiche Teile, indem Sie Präfix und Suffix hinzufügen

Das folgende Skript wird ziemlich genau so funktionieren, wie Sie es beschreiben. es wird:

  • teilen Sie die Datei in gleiche Teile (Anzahl der Zeilen)
  • füge ein Präfix hinzu (als erste Zeile)
  • ein Suffix hinzufügen (als letzte Zeile

Außerdem:

  • die Dateien werden benannt:

    split_1, split_2, split_3
    

    usw.

  • Alle Dateien werden im Arbeitsverzeichnis des Skripts erstellt

Ein Beispiel

Eine Datei wie:

aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
pinda
aap
noot
mies
wim
...

wird aufgeteilt wie:

something_before
aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
something_after

usw

Das Drehbuch

#!/usr/bin/env python3

# --- set the file, the prefix , suffix and chunksize below
f = "/home/jacob/Bureaublad/test"
prefix = "something_before"
suffix = "something_after"
chunksize = 10

# --- don't change anything below
n = 1
nfile = 1

with open(f) as read:
    for l in read:
        if (n-1) % chunksize == 0:
            s = prefix+"\n"; a = ""
        Elif n%chunksize == 0:
            a = suffix; s = ""
        else:
            a = ""; s = ""
        open("split_"+str(nfile), "a+").write(s+l+a)
        if n%chunksize == 0:
            nfile += 1    
        n += 1
# add the suffix to the last file if it is "incomplete"
last = suffix if a == "" else ""
open("split_"+str(nfile), "a+").write(last)

Wie benutzt man

  1. Kopieren Sie das Skript in eine leere Datei und speichern Sie es als split_chunks.py
  2. Legen Sie im Kopfbereich des Skripts den Pfad zu Ihrer großen Datei fest, das Präfix, das Suffix und die Blockgröße (Anzahl der Zeilen, in die aufgeteilt werden soll).

    # --- set the file, the prefix , suffix and chunksize below
    f = "/home/jacob/Bureaublad/test"
    prefix = "something_before"
    suffix = "something_after"
    chunksize = 10
    
  3. Führen Sie das Skript mit dem folgenden Befehl aus:

    python3 /path/to/split_chunks.py
    

Erläuterung

... wird folgen, muss schlafen :)

3
Jacob Vlijm

Es ist ein wenig schwierig, das richtige Zitat zu finden (I think, weil splitbash - c ' ... ' unter der Haube aufruft), aber neuere Versionen von GNU split liefern einen --filter Befehl, mit dem das möglich sein soll - zum Beispiel mit sed

split -l 10 --filter='sed -e '\''1i\header text'\'' -e '\''$a\footer text'\'' > $FILE' file

oder (noch einfacher) mit printf

split -l 10 --filter='{ printf "header text\n"; cat - ; printf "footer text\n"; } > $FILE' file

Zur Veranschaulichung wird bei file generiert als

printf '%03d\n' {1..100} > file

zeilen, die dann aus Zahlen von 001 bis 100 bestehen

split -l 10 --filter='{ 
  printf "header line 1\nheader line 2\n"
  cat - 
  printf "footer line 1\nfooter line 2\n"
  } > $FILE' file

ausgabedateien geben

$ ls xa?
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

mit zum Beispiel

$ cat xad
header line 1
header line 2
031
032
033
034
035
036
037
038
039
040
footer line 1
footer line 2
3
steeldriver