Dateiinhalt verdoppeln

Diskutiere Dateiinhalt verdoppeln im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo, ich möchte den Inhalt einer Datei verdoppeln, Kopf- und Endesatz ausgenommen. Danach muss im Endesatz die Datensatzanzahl angepasst werden...

  1. ib0b

    ib0b Grünschnabel

    Dabei seit:
    13.09.2017
    Beiträge:
    1
    Zustimmungen:
    0
    Hallo,

    ich möchte den Inhalt einer Datei verdoppeln, Kopf- und Endesatz ausgenommen.
    Danach muss im Endesatz die Datensatzanzahl angepasst werden (verdoppelt werden).
    Leider liegt meine aktive Unix Zeit lange in der Vergangenheit und ohne Hilfe schaffe ich das nicht.
    Schon mal vielen Dank vorab!

    Quelldatei:
    Kopfsatz A*
    Zeile 1
    Zeile 2
    Zeile 3
    ...
    Zeile N
    Endesatz Z*

    Zieldatei:
    Kopfsatz A*
    Zeile 1
    Zeile 2
    Zeile 3
    ...
    Zeile N
    Zeile 1
    Zeile 2
    Zeile 3
    ...
    ZeileN
    Endesatz Z* (Neuer Satzzähler Stelle 67-81 = alter Satzzähler * 2)

    Die Datei hat eine Größe von ca. 350MB und ca. 500Tsd Zeilen.

    Danke & Gruß
    Boris
     
  2. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.222
    Zustimmungen:
    17
    Du könntest sowas wie "+yGGp" in eine Datei schreiben und damit vim via -s auf Dein Ursprungsfile loslassen.
     
  3. #3 fresh$free, 10.06.2018
    fresh$free

    fresh$free Mitglied

    Dabei seit:
    03.10.2013
    Beiträge:
    29
    Zustimmungen:
    0
    Was ist mit Stelle 67-81 gemeint?
     
  4. #4 fresh$free, 10.06.2018
    fresh$free

    fresh$free Mitglied

    Dabei seit:
    03.10.2013
    Beiträge:
    29
    Zustimmungen:
    0
    Code:
    #!/usr/bin/gawk -f
    
    # aufruf mit scriptname.awk quelldatei zieldatei
    
    
    doExit=0
    function usage(   doexit) {
     print "scriptname quelldatei zieldatei"
     doExit=1
     exit
    }
    
    BEGIN {
     if (ARGC != 3) {
       print "Falsche Parameteranzahl"
       usage()
     }
    
     if (ARGV[1] == ARGV[2] ) {
       print "Fehler: Namen von Quelle und Ziel identisch"
       usage()
     }
    
     ARGV[3] = ARGV[2];   # quelle brauchen wir zweimal frü zweiten durchlauf
     ARGV[2] = ARGV[1];
     ARGC++;              # sonst geht 2. durchlauf nicht
    
     print "Sourcedatei: " ARGV[1]  # name der quelldatei als argument angeben
     fn_ziel=ARGV[3];
     print "Zieldatei  : " fn_ziel
    
     ctr_first_run= 0;
     ctr_2nd_run= 0;
    }
    
    # 1. Lauf
    NR == FNR {
      if ( (NR>=1) && (NF > 1)) { 
        print $0 > fn_ziel
      }
      if ( (NR>1) && (NF > 1)) { 
        ctr_first_run++;
      }
      next
    }
    
    
    { # 2. lauf
        if (FNR>1 && NF > 1) { 
          print $0 > fn_ziel
          ctr_2nd_run++;
      }
    }
    
    END {
      if (doExit) { exit };
      print "Summe der Zeilen im 1. durchlauf:" ctr_first_run;
      print "Summe der Zeilen im 2. durchlauf:" ctr_2nd_run;
      if (ctr_first_run != ctr_2nd_run ) { print "Fehler! Ungleiche ctr-Werte"; }
      print ctr_first_run+ctr_2nd_run > fn_ziel;
    }
    
     
  5. #5 fresh$free, 10.06.2018
    fresh$free

    fresh$free Mitglied

    Dabei seit:
    03.10.2013
    Beiträge:
    29
    Zustimmungen:
    0
    in Perl:
    Code:
    #!/usr/bin/perl 
    use strict;
    use warnings;
    
    my $fn_quelle = "quelle.txt";
    my $fn_ziel     = "ziel.txt";
    
    my $ctr_1st_step=-1; # weil wir die kopfzeile mit schreiben aber das kein datensatz ist also mit 1 weniger anfangen zu zählen
    my $ctr_2nd_step=0;
    
    open(my $ifh, "<", $fn_quelle) or die ("kann datei $fn_quelle nicht öffnen");
    open(my $ofh, ">", $fn_ziel) or die ("kann datei $fn_ziel nicht öffnen");
    
    # 1. step
    my $zeile;
    while ($zeile = <$ifh>) {
     # checken ob letzte Zeile auf irgendein pattern wie: Zahlen + \n
     if ($zeile =~ /^[0-9]+$/) {
       last;
     }
     else {
       $ctr_1st_step++;
       print $ofh $zeile;
     }
    }
    
    print "ende 1 step\n";
    print "ctr_1st_step:" . $ctr_1st_step . "\n";
    
    #2 step
    seek $ifh,0,0; #dateizeiger der quelldatei wieder auf angang
    
    my $z1 = <$ifh>; # 1. Zeile wegwerfen
    while ($zeile = <$ifh>) {
     # checken ob letzte Zeile auf irgendein pattern wie: Zahlen + \n
     if ($zeile =~ /^[0-9]+$/) {
       last;
     }
     else {
       $ctr_2nd_step++;
       print $ofh $zeile;
     }
    }
    print $ofh ($ctr_1st_step + $ctr_2nd_step);
    
    close $ifh;
    close $ofh;
    
     
Thema:

Dateiinhalt verdoppeln

Die Seite wird geladen...

Dateiinhalt verdoppeln - Ähnliche Themen

  1. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  2. Dateiinhalt mit Tabs wie Original an andere Datei anhängen

    Dateiinhalt mit Tabs wie Original an andere Datei anhängen: hallo, ich habe eine Datei mit diesem Inhalt: 0 0 12 -3.616 4.788 0 0.000...
  3. awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

    awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung: Hallo Ich habe folgendes Problem: Anhand dem Ergebnis einer Datenbankabfrage habe ich mir mit sed usw. einen String gebastelt und in einer Datei...
  4. Dateiinhalte multiplizieren

    Dateiinhalte multiplizieren: Hallo, ich möchte gern die Inhalte mehrerer Datein multiplizieren und das Ergebnis in eine Ergebnisdatei schreiben lassen. Beispiel:...
  5. Keine Dateiinhalte bei Freigebenen Ordnern

    Keine Dateiinhalte bei Freigebenen Ordnern: Hallo Leute ich habe seit paar tagen einen Samba Server auf meinen RHEL5 aufgesetzt und bin mit einem Windows Rechner darüber verbunden. Die...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden