Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Dateien Zeilenweise ausschneiden und zusammenfügen

  1. #1
    Registrierter Benutzer
    Registriert seit
    Jan 2014
    Beiträge
    98

    Question Dateien Zeilenweise ausschneiden und zusammenfügen

    Hallo Zusammen,
    hier eine wahrscheinlich einfache Aufgabe, meine skripting Fähigkeiten sind aber nicht die bessten.

    Ich habe viele Dateien (100-10k), mit je 1kB-100MB, die alle in einem Ordner liegen und ich zusammen fügen möchte.
    Es sollen von allen Dateien die ersten 4 Zeilen und die letzte Zeile entfernt werden, dann alle Zusammengefügt (Reihenfolge ist egal) und bei der Zusammengefügten Datei die ersten 4 und letzte Zeile wieder ergänt werden.

    Das löschen und zusammenfügen klappt (wenn auch nicht effizient), nur den Kopf (ersten 4 Zeilen) und den Fuss (letzte Zeile) bekomme ich nicht hin:
    Code:
    #!/bin/bash
    
    # Kopfzeile in Datei ...
    find * -name "*.gml" -print0 | while read -d $'\0' f
    do
    	tail -n+4 $f > $f.tmp
    	sed '$ d' $f.tmp > $f.tmp2
    	cat $f.tmp2 >> alle.gml
    	rm $f.tmp $f.tmp2
    	# head='tail -2 $f'
    done
    # echo "$head" >> alle.gml # Fusszeile in Datei
    OS Ist Ubuntu, falls relevant.

    Ich bin dankbar für jede hilfe

  2. #2
    Registrierter Benutzer
    Registriert seit
    Apr 2011
    Ort
    Bergheim
    Beiträge
    125
    Ich würde es in Perl lösen. Dabei würde ich die jede Datei in ein Array einlesen. Und dann bei der ersten Datei den Header ausgeben und die letzte Zeile merken, ansonsten immer ab Positon 4 bis zur vorletzten Zeile das Array in deine gesamt Datei ausgeben. Zum Schluss musst Du nur noch die letzte Zeile ausgeben.
    Nachteil der Variante du benötigst entsprechend RAM.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Jan 2008
    Beiträge
    2.496
    Einfach eine Pipe nehmen:

    Code:
     tail -n+4 $f  | sed '$ d' >> alle.gml

  4. #4
    Registrierter Benutzer
    Registriert seit
    Jan 2014
    Beiträge
    98

    Question

    Vielen Dank euch beiden. Was haltet ihr hiervon?
    Code:
    #!/bin/bash
    # chmod u+x /var/bash/merge_gml.sh
    
    # get first two lines
    find * -name "*.gml" -print0 | while read -d $'\0' f
    do
    	head -n+2 $f  > ../all.gml
    	break
    done
    
    # body of everyfile
    find * -name "*.gml" -print0 | while read -d $'\0' f
    do
    	echo $f "added ..."
    	tail -n+4 $f  | sed '$ d' >> ../all.gml
    done
    
    # get last line
    find * -name "*.gml" -print0 | while read -d $'\0' f
    do
    	tail --lines=1 $f >> ../all.gml
    	break
    done
    Ist nicht sehr schnell, aber funktioniert soweit. Was könnte man optimieren?

    Leider bin ich den Skriptens nicht mehr wirklich mächtig. Einst konnte ich sehr gut php, aber wenn man das nicht mehr benötigt ... ich habe mir aber vorgenommen Python zu lernen. So etwas in der Art sollte damit ja Plattformübergreifend auch funktionieren?

Ähnliche Themen

  1. Mplayer Dateien zusammenfügen
    Von tomcom im Forum Musik
    Antworten: 9
    Letzter Beitrag: 13.12.08, 00:40
  2. Dateien zeilenweise mergen?
    Von chris_h im Forum Anwendungen Allgemein, Software
    Antworten: 3
    Letzter Beitrag: 01.07.08, 11:28
  3. Dateien unkomprimiert zusammenfügen
    Von Soldier89 im Forum Linux Allgemein
    Antworten: 14
    Letzter Beitrag: 16.02.07, 15:05
  4. dateien zusammenfügen
    Von fanity im Forum Linux Allgemein
    Antworten: 3
    Letzter Beitrag: 11.07.05, 22:30
  5. dat dateien zusammenfügen
    Von mfhg im Forum Fernsehen
    Antworten: 1
    Letzter Beitrag: 25.08.03, 20:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •