awk - Variablen aus $ fix speichern?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Palima, 29.05.2006.

  1. #1 Palima, 29.05.2006
    Zuletzt bearbeitet: 29.05.2006
    Palima

    Palima Grünschnabel

    Dabei seit:
    28.05.2006
    Beiträge:
    4
    Zustimmungen:
    0
    Servus

    ich muss derzeit ein Skript schreiben und benutze zum ersten mal awk ... nun irgendwie komm ich nicht weiter ... hoffe ihr könnt mir helfen

    ich soll mein skript dermassen ausführen:

    grades.sh 50 65 75 85 100 < Beispiel.txt

    wobei ich die argumente gerne fix gespeichert hätte, weil ich sie zur Auswertung brauche ...

    wenn ich aber einfach sage

    x= $1

    dann merkt er sich das nur solange bis ich die Beispiel.txt mit getline einlese ... dann werden die inhalte überschrieben

    gibts ne möglichkeit die zu behalten?


    vielen dank im voraus
    Christoph

    PS: hier der Code

    ich möchte nun die Argumente ns1 bis ns5 auch in der zweiten awk-Anweisung verwenden können ... wie könnte das gehen?
     
  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. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Da awk jeweils eine neue Instanz öffnet, kannst Du logischerweise nicht gemeinsame Variablen nutzen. Du kannst aber die Variablen durch die Shell übergeben:

    Code:
    [~]$ params=$(echo 'a b c' | awk '{print "ns1="$1" ns2="$2" ns3="$3}')
    [~]$ echo huhu | awk '{print "ns1="ns1" ns2="ns2" ns3="ns3}' $params
    ns1=a ns2=b ns3=c
    
    Gruss, Xanti
     
  4. Palima

    Palima Grünschnabel

    Dabei seit:
    28.05.2006
    Beiträge:
    4
    Zustimmungen:
    0
    danke für die Hilfe - gute Idee

    ginge es auch mit einem awk-Aufruf? oder muss ich zwei machen? -
    hab noch keine andere Möglichkeit gefunden mit der vorgegebenen Ausführungsart sowohl die Argumente als auch das file in der Weise zu übergeben ...

    salut
    Palima
     
  5. #4 Xanti, 29.05.2006
    Zuletzt bearbeitet: 29.05.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Vielleicht geht folgendes:

    grades.sh:
    Code:
    awk '{...}' ns1=$1 ns2=$2 ns3=$3 ns4=$4 ns5=$5
    
    Code:
    ./grades.sh 50 65 75 85 100 < Beispiel.txt
    
    Gruss, Xanti
     
  6. Palima

    Palima Grünschnabel

    Dabei seit:
    28.05.2006
    Beiträge:
    4
    Zustimmungen:
    0
    So bin endlich dazu gekommen deine Vorschläge auszuprobieren ...

    also beim ersten weiss ich nicht ob du mich richtig verstanden hast, oder ich es einfach falsch mache ...

    denn was ich will ist das die Argumente von grades.sh - dh die Werte 50,60, ... usw also die Felder $1 bis $5 als Variable übergeben werden ...

    im zweiten awk Aufruf stehen die derzeit als Zahlenwerte ja drinnen, aber ich möchte sie beim Aufruf übergeben lassen ...

    das zweite hat bei mir gar nicht geklappt ... da bekomm ich syntax error ...
    hm mach ich da was falsch??

    danke für deine hilfe soweit
    Palima
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 Xanti, 30.05.2006
    Zuletzt bearbeitet: 30.05.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Langsam bin ich richtig verwirrt. ;)

    Ich fasse nochmal zusammen: Du hast die Argumente, die in ns gespeichert werden sollen, bereits bei Aufruf des Shellskriptes zur Verfügung? Wenn ja, dann rufst Du einfach das Skript mittels

    Code:
    ./grades.sh 50 65 75 85 100 < Beispiel.txt
    
    auf. In das Skript schreibst Du Deine zweite awk-Anweisung:

    Code:
    awk '{
    x1=x2=x3=x4=x5=0;
    do {
    #print tmp;
    if($5<= 100 && $5 > 85) {x1++}
    if($5< 85 && $5 >=75) {x2++}
    if($5< 75 && $5 >=65) {x3++}
    if($5< 65 && $5 >=50) {x4++}
    if($5< 50 && $5 >=0) {x5++}
    #print $5;
    SUMStudent = NR
    } while (getline != 0)
    print "Anzahl der Studenten: \t" SUMStudent;
    av1 = x1/SUMStudent *100;
    av2 = x2/SUMStudent *100;
    av3 = x3/SUMStudent *100;
    av4 = x4/SUMStudent *100;
    av5 = x5/SUMStudent *100;111
    print "Notenskala \t Note \tAnzahl \tAnteil"
    print "85 - 100 \t 1 \t" x1 "\t" av1 "%"
    print "75 - 85 \t 2 \t" x2 "\t" av2 "%"
    print "65 - 75 \t 3 \t" x3 "\t" av3 "%"
    print "50 - 65 \t 4 \t" x4 "\t" av4 "%"
    print "<50 \t\t 5 \t" x5 "\t" av5 "%"
    }' ns1=$1 ns2=$2 ns3=$3 ns4=$4 ns5=$5
    
    Die erste awk-Anweisung lässt Du weg. Beachte die ns1=$1 ns2=$2 ns3=$3 ns4=$4 ns5=$5 nach der awk-Anweisung, damit werden die ns erstellt und übergeben.

    Gruss, Xanti

    edit: Bin ich blind? Ich sehe nirgendswo die Verwendung von den ns-Variablen in deinem zweiten awk.
     
  9. Palima

    Palima Grünschnabel

    Dabei seit:
    28.05.2006
    Beiträge:
    4
    Zustimmungen:
    0
    servus

    danke für deine bemühungen ... hab es hinbekommen

    als die ns-Variablen wären statt den ausgeschriebenen Werten 50,65, ... usw gewesen ...

    ich habe sie jetzt als einfache bash-Variablen gespeichert und übergeben ... das ganze hat aber nie funktioniert, weil die bash-Variablen von den awk-Variablen überschrieben wurden dh die $1,$2, usw haben sich mit übergabe des .txt natürlich geändert... mein problem war also, das ich bash-Varible innerhalb von awk mit $ns auslesen wollte, statt mit '$ns' und das funkte nicht .... eigentlich haben mir also nur ' gefehlt ... aber als sporadischer shell-nutzer der ich bin, ist mir die quoterei etwas fremd

    naja - danke trotzdem
    & die schönen tage wünsch ich
    Palima
     
Thema:

awk - Variablen aus $ fix speichern?

Die Seite wird geladen...

awk - Variablen aus $ fix speichern? - Ähnliche Themen

  1. Variablen in Session speichern

    Variablen in Session speichern: Hi, ich würde gerne ein script machen, mit dem man in einer combobox eine auswahl treffen kann und abhängig vom ausgewählten wird der inhalt...
  2. Variablen dauerhaft speichern/JAVA

    Variablen dauerhaft speichern/JAVA: Hi, ich habe eine kleine Frage: Wie kann ich in JAVA eine Variable dauerhaft Speichern? Wir haben in diesem Schuljahr mit der...
  3. Teile von Strings in Variablen speichern.

    Teile von Strings in Variablen speichern.: Hallo, wie ihr seht, ich bin nicht gad der Hellste, was Unix angeht, aber deshalb arbeite ich ja daran ;) Mein aktuelles Problem sieht so...
  4. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  5. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...