AWK Spalten anfügen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Falcon83, 14.01.2008.

  1. #1 Falcon83, 14.01.2008
    Falcon83

    Falcon83 Grünschnabel

    Dabei seit:
    14.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    ich suche eine Möglichkeit mit awk zwei Spalten aus aus zwei Dateien zu subtrahieren.
    Spaltenorientierte Ausgabe ist mit awk kein Problem. Allerdings habe ich noch keinen Syntax gefunden, um aus zwei Dateien jeweils eine Spalte herauszufiltern und nebeneinander darzustellen bzw. voneinander zu subtrahieren.

    Gruß,
    Falcon83
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 14.01.2008
    Zuletzt bearbeitet: 14.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Dazu hast du mehrere Möglichkeiten.
    Entweder zu liest die erste Datei komplett in ein Array ein (prüfen solange ARGIND == 1 ist ) und wenn du bei der zweiten Datei (ARGIND==2) bist, berechnest du die Werte und gibst sie aus.
    Das ist bei sehr großen Dateien aber unpraktisch.
    Oder du verwendest getline.
    Oder du Mixt die Eingabe vorher Zeilenweise und übergibst beide Strings an awk, dann kannst du damit direkt arbeiten (Zeilenweise)

    Letzeres als Beispiel:
    Code:
    # Nutze Redirect mit exec für jede Datei 
     exec 3<file1.txt ; #File1 kommt aus 3
     exec 4<file2.txt ; #File2 kommt aus 4
    while read line1 <&3 && read line2 <&4;
    do 
    echo "$line1 $line2";
    done
    
    Das gibt dir aus beiden Dateien die Zeilen nebeneinander aus, so dass du entweder gleich selber rechnen kannst (nur mit integer statt echo ),oder an awk verfüttern.

    Gruß Wolfgang
     
  4. #3 SchaubFD, 14.01.2008
    Zuletzt bearbeitet: 14.01.2008
    SchaubFD

    SchaubFD Mitglied

    Dabei seit:
    03.01.2008
    Beiträge:
    35
    Zustimmungen:
    0
    Wolfgang, er meint AWK.

    In etwa folgendes AWK Skript (konnte es leider nicht testen!)

    Code:
    BEGIN {
      FSA=";";
      FSB=";";
      DateiA="a.txt";
      DateiB="b.txt";  
      Ausgabe="ausgabe.txt";
      OK=TRUE;
      do {
        if (getline<DateiA) { AnzahlA=Split($0,FeldA,FSA); } else OK=FALSE;
        if (getline<DateiB) { AnzahlB=Split($0,FeldB,FSB); } else OK=FALSE;
        if (OK) printf("%s;%s\n",FeldA[1],FeldB[1]) > Ausgabe;
      } while (OK);
      close DateiA;
      close DateiB;
      close Ausgabe;
    }
    
     
  5. #4 Wolfgang, 14.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ich weiß, dass er awk meint. Auf getline hatte ich ja schon verwiesen.
    Meine Methode war als eine Alternative gedacht, beide Zeilen nebeneinander auszugeben, welche ja dann leicht via Pipe an awk verfüttert werden kann.
    Das ist IMHO atomarer und du kannst direkt auf die felder mit $x zugreifen.
    Code:
    mein code...done |awk '{ERG=$1 -$5;print ....}'
     
  6. #5 Falcon83, 14.01.2008
    Falcon83

    Falcon83 Grünschnabel

    Dabei seit:
    14.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    vielen Dank für Eure Antworten. Hatte inzwischen selbst eine Lösung gefunden, die zwar nicht sehr elegant ist, aber ihren Zweck erfüllt.

    1. Skript

    Code:
    #/bin/bash
    cp zusammenfuehren2Dateien.sh zusammenfuehren2Dateien.sh.tmp
    while [ $i -le $3 ]
    do
     
           # platzhalter in steuerdatei ersetzen
           sed -i "s/%ANZAHL/$i/g"  "zusammenfuehren2Dateien.sh"
           sed -i "s/%DATEI1/$1/g"  "zusammenfuehren2Dateien.sh"
           sed -i "s/%DATEI2/$2/g"  "zusammenfuehren2Dateien.sh"
           zusammenfuehren2Dateien.sh
           cp  zusammenfuehren2Dateien.sh.tmp zusammenfuehren2Dateien.sh
           i=`expr $i + 1`
    
    done
    
     awk '{print $1 " " $4 - $2}' Zusammenfuehren_$2-$1.dat > Subtrahiert_$2-$1.dat
     rm Zusammenfuehren_$2-$1.dat
    
    2. Skript zusammenfuehren2Dateien.sh:
    Code:
    #/bin/bash
    (awk 'FNR == %ANZAHL {printf  $1 " " $2 " "}' %DATEI1.dat %DATEI2.dat && echo " ") >> Zusammenfuehren_%DATEI2-%DATEI1.dat
    
    Falcon83
     
Thema: AWK Spalten anfügen
Besucher kamen mit folgenden Suchen
  1. awk 2 dateien und spalte anfügen

Die Seite wird geladen...

AWK Spalten anfügen - Ähnliche Themen

  1. Fedora-Entwickler möchte Systemd erneut aufspalten

    Fedora-Entwickler möchte Systemd erneut aufspalten: Der Fedora-Entwickler Zbigniew JÄ™drzejewski-Szmek, der unter anderem Co-Maintainer von Systemd für die Distribution ist, hat für Fedora 22 einen...
  2. Jede n-te Spalte auslesen, bzw bestimmte Spalten ausschließen

    Jede n-te Spalte auslesen, bzw bestimmte Spalten ausschließen: Moin, habe ne Datei von der ich nur jede n-te spalte auslesen möchte, bzw löschen möchte (konstant jede dritte Spalte soll raus um genau zu sein)....
  3. Artikel: 960-Grid-System - Eine CSS-Bibliothek für Spaltenlayouts

    Artikel: 960-Grid-System - Eine CSS-Bibliothek für Spaltenlayouts: Das Internet und dessen primär HTML-basierter Inhalt ist heute allgegenwärtig. Dem Einstellen von eigenen Inhalten stehen dabei keine...
  4. Spaltenweise Zeichen hinzufügen (sed? / awk?)

    Spaltenweise Zeichen hinzufügen (sed? / awk?): Hallo, kann mir bitte jemand bei folgendem Fall helfen: Habe eine Datei mit mehreren Spalten in denen beliebige Zahlenwerte stehen. Jetzt...
  5. Spaltennamen über Perl aus PostgresDB ermitteln

    Spaltennamen über Perl aus PostgresDB ermitteln: Hey Leute, wie kann man über einen Perl Datenbankaufruf Spaltennamen einer Tabelle ermitteln? Geht das? \d tabellenname funzt nicht...