Inhalte in Datei einfügen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tw-elektric, 24.06.2008.

  1. #1 tw-elektric, 24.06.2008
    Zuletzt bearbeitet: 24.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe in VB.Net ein kleines Porgramm gemacht, wo bestimmt Zeilen in einen Text einfügt, wenn gewisse Parameter vorhanden sind. Nun wird die Datei unter Linux erzeugt und danach muss mein Tool unter Windows die Datei noch mal überarbeiten. Nun wäre es sinnvoll, wenn man das ganze direkt unter Linux schon korekt erzeugt hätte. Leider kenne ich mich nicht besondes mit den Befehlen aus. Die Console ist die csh / tcsh.

    Habt ihr eine einfache Lösung für diese Vorgänge:

    1.) Prüfen ob in der ersten Zeile der Datei ein "*" steht.
    2.) Prüfen ob in der zweiten Zeile ein "%FSLAX33Y33*%"
    3.) Suchen ob jeweils eine Zeilen mit "Y610000D01" und "X355000D01", "X409000D01" oder "X457000D01" besteht.
    4.) Variabe setzten, je nach Fund z.B. var = 610355 oder var=610457
    5.) Wenn die ersten 3 Punkte erfoglreich gelaufen sind, muss die erste Zeile ersetzt werden: von "*" in "G04 MEASURE T'circle' D2.00 I0 S0 *"
    6.) vor der Zeilen "%IPPOS*%" müssen zwei Zeilen eingfügt werden.
    7.) und nach der Zeile "%LDP*% müssen mehrere Zeilen eingefügt werden, die in einer bestimmten Textdatei stehen. z.B. 610355.txt, 610407.txt und 610457.txt
    Daher die Variable mit der Nutzengröße.

    Denk ihr so was ist möglich mit der CSH oder sollte man es irgendwie anderst lösen? Es funktioniert ja nun schon, nur eben über dem Umweg, wenn die Datei ausgegeben wurde unter Linux, muss man zu einem Windowsrechner und die Datei noch mal überarbeiten lassen.

    Danke für eure Hilfe.
    Gruß TW-elektric
     
  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 aspire_5652, 24.06.2008
    Zuletzt bearbeitet: 24.06.2008
    aspire_5652

    aspire_5652 Tripel-As

    Dabei seit:
    02.01.2008
    Beiträge:
    198
    Zustimmungen:
    0
    Prinzipiell ist das alles ohne Probleme möglich.
    Möglichkeiten die dir obiges erfüllen gibt es genügend.
    Ist halt nur eine Glaubensfrage, ob man die Werkzeuge der shell nimmt: (cat, grep, tail, head, ...), oder man lieber gleich in einer Scriptsprache arbeitet: sed, awk, perl, ...

    Kommt darauf an welchen Aufwand du bereit bist zu investieren und welche Vorkenntnisse du hast.

    Aber ich denke: grep, sed, cat und ein wenig Shell-Scripting sind hier erste Wahl
     
  4. #3 tw-elektric, 24.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    na gut, dann muss ich mich mal schlau machen. vorkenntnis sind nicht wirklich so viele da :( und ich schätze den aufwand ziemlich hoch ein, und weiß nicht ob sich das nun lohnt. wenn ich jetzt geschätzt zwei tage an so nem script dran sitze, bis ich mich da richtig eingelesen habe.
     
  5. #4 Aqualung, 24.06.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Code:
    #!/bin/csh
    head -1 $1  | grep '*' > /dev/null
    if ( $status == 0 ) then
       echo "Stern"
    endif
    


    Code:
    #!/bin/csh
    head -2 $1 | tail -1  | grep '%FSLAX33Y33\*\%'  > /dev/null
    if ( $status == 0 ) then
       echo "%FSLAX33Y33*%"
    endif
    
    To be continued ...
     
  6. #5 aspire_5652, 24.06.2008
    aspire_5652

    aspire_5652 Tripel-As

    Dabei seit:
    02.01.2008
    Beiträge:
    198
    Zustimmungen:
    0
    3.) Suchen ob jeweils eine Zeilen mit "Y610000D01" und "X355000D01", "X409000D01" oder "X457000D01" besteht.

    Code:
    #!/bin/csh
    # sucht nach allen 4 Mustern, sobald eins vorhanden ist, dann erfolgreich
    egrep 'Y610000D01|X355000D01|X409000D01|X457000D01' $datei > /dev/null
    if [ $0 -eq 0 ]
    then
    echo "Treffer "
    else
    echo "kein Treffer"
    fi
    
    hier wird nach jedem Muster einzeln gesucht, für den Fall, wenn du mehr differenzieren möchtest:
    Code:
    grep Y610000D01 $datei > /dev/null
    if [ $0 -eq 0 ]
    then
    	echo "Treffer 1"
    fi
    
    grep X355000D01 $datei > /dev/null
    if [ $0 -eq 0 ]
    then
    	echo "Treffer 2"
    fi
    
    grep X409000D01 $datei > /dev/null
    if [ $0 -eq 0 ]
    then
    	echo "Treffer 3"
    fi
    
    grep X457000D01 $datei > /dev/null
    if [ $0 -eq 0 ]
    then
    	echo "Treffer 4"
    fi

    4.) Variabe setzten, je nach Fund z.B. var = 610355 oder var=610457
    -> das ist einfach je nach dem:
    Code:
    ergebnis=$(grep foo bar) #oder irgend eine andere Abfrage
    case "$ergebnis" in
    Fall1) var=610355;;
    Fall2) var=610457;;
    esac
    
     
  7. #6 Aqualung, 24.06.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    AFAIK ist das nur in bash möglich. In csh z.B. backquotes d.h.

    Code:
    set ergebnis = "`grep foo bar`"
     
  8. #7 tw-elektric, 24.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    WOW, vielen Dank für die Posts bis jetzt :D
    Dann werde ich dies morgen mal antesten und die ersten 4 Punkte versuchen zu Test. Wenn ich dann so weit bin, hoffe ich auf eure weiter Hilfe bei der restlichen Umsetzung...

    Vielen vielen Dank u. Schönen Abend
    Grüße TW-elektric
     
  9. #8 tw-elektric, 25.06.2008
    Zuletzt bearbeitet: 25.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    Guten Morgen,

    so, nun habe ich mal zum Test den Code so angeordnet:

    Code:
    #!/bin/csh
    set echo
    
    #Überprüfen auf * in der ersten Zeile
    head -1 /home/ottbe/Desktop/test.ger  | grep '*' > /dev/null
    if ( $status == 0 ) then
    	#Routine
    
    	grep X355000D01 /home/ottbe/Desktop/test.ger > /dev/null
    	if [ $0 -eq 0 ]
    	then
    	set strNutzen = "610355"
    	fi
    
    	grep X409000D01 /home/ottbe/Desktop/test.ger > /dev/null
    	if [ $0 -eq 0 ]
    	then
    	set strNutzen = "610409"
    	fi
    
    	grep X457000D01 /home/ottbe/Desktop/test.ger > /dev/null
    	if [ $0 -eq 0 ]
    	then
    	set strNutzen = "610457"
    	fi   
    endif
    
    Jetzt bekomme ich folgende Ausgabe:
    Code:
    TW80:~/Desktop> ./ritzscript.csh 
    head -1 /home/ottbe/Desktop/test.ger
    grep *
    if ( 0 == 0 ) then
    grep X355000D01 /home/ottbe/Desktop/test.ger
    if [ ./ritzscript.csh -eq 0 ]
    if: Expression Syntax.
    TW80:~/Desktop>
    
    Irgendwas muss da falsch sein. Und wenn ich in der Testdatei den "*" in der ersten Zeile entferne, bekomme ich die gleiche Ausgabe, aber eig. sollte er doch garnicht weiter in die Routine gehen, da ja kein Stern da ist...

    Anfang der Testdatei:
    Code:
    *
    %FSLAX33Y33*%
    %MOMM*%
    %ADD10C,0.501000*%
    %ADD11C,1.000000*%
    %ADD12C,4.003000*%
    %ADD13C,1.504000*%
    %IPPOS*%
    %LN26664ritz.gbr*%
    %LPD*%
    G75*
    G54D10*
    X226000Y228000D02*
    Y276000D01*
    X206850Y282500D02*
    X095150D01*
    X091000Y278350D02*
    Y225650D01*
    X095150Y221500D02*
    X206850D01*
    X226000Y157000D02*
    Y205000D01*
    X206850Y211500D02*
    X095150D01*
    X091000Y207350D02*
    Y154650D01*
    X095150Y150500D02*
    X206850D01*
    X226000Y086000D02*
    Y134000D01*
    X206850Y140500D02*
    X095150D01*
    X091000Y136350D02*
    Y083650D01*
    
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    so, ich habe es jetzt auf das nötigste reduziert:

    Code:
    #!/bin/csh
    set echo
    
    #Nutzengröße herausfinden
    grep X355000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610355
    endif
    
    grep X409000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610409
    endif
    
    grep X457000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610457
    endif
    
    leider klappt die variablenfüllung nicht :(

    Code:
    TW80:~/Desktop> ./ritzscript.csh
    grep X355000D01 /home/ottbe/Desktop/test.ger
    if ( 1 == 0 ) then
    grep X409000D01 /home/ottbe/Desktop/test.ger
    if ( 1 == 0 ) then
    grep X457000D01 /home/ottbe/Desktop/test.ger
    if ( 0 == 0 ) then
    set nutzen = 610457
    endif
    TW80:~/Desktop> echo $nutzen
    nutzen: Undefined variable.
    TW80:~/Desktop>
    

    Was ist das problem?

    Und wie mache ich nun weiter? Schritt 5 - 7 ?

    Danke & Gruß
    TW-elektric
     
  10. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Deine Variable "$nutzen" wird nur in der ausführenden Shell gesetzt.
    Entweder du fügst an dein script ein
    Code:
    echo $[nutzen} 
    
    ein oder exportierst die Variable.
    Ich meine in der csh ist es setenv, guck mal in die man page.
     
  11. #10 tw-elektric, 25.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    gut, im prinzip arbeite ich ja in dem script mit der variable weiter. daher funktioniert es nun soweit.

    jetzt muss ich nur mit den weiter schritten voran kommen.
    und da komme ich nicht weiter. schritt 5-7

    gruß
    TW-elektric
     
  12. #11 Aqualung, 25.06.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
  13. #12 tw-elektric, 26.06.2008
    Zuletzt bearbeitet: 26.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    danke, funktioniert einwandfrei bis jetzt.

    nun ist noch Punkt 6 dran:
    vor der Zeilen "%IPPOS*%" müssen zwei Zeilen eingfügt werden

    und zwar:
    %ADD15C,2.005*%
    %ADD16C,2.006*%

    und Punkt 7:
    nach der Zeile %LDP*% muss der komplette Textinhalt einer Textdatei eingefügt werden. Es gibt die Textdateien 610355.txt, 610409.txt und 610457.txt, deshalb die Varibale "nutzen"


    Vielen Dank
    Gruß TW-elektric
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    so, Punk 6 habe ich nun geschafft:
    Code:
    sed -e "s/\%IPPOS\*\%/\%ADD15C,2.005\*\%\n\%ADD15C,2.005\*\%\n\%IPPOS\*\%/g" /pfad/zur/tesdatei
    
    nun muss ich noch Punkt 7 machen. Solle ja ähnlich gehen wie Punkt 6.
    aber wie bekomme ich den inhalt der datei in den sed befehl.

    Meine Denkweise:
    Code:
    [B]\%LDP\n´cat 610409.txt´[/B]
    sed -e "s/\%LDP/[B]\%LDP\n´cat 610409.txt´[/B]/g" /pfad/zur/testdatei
    
    in der testdatei stehen ca. 12 zeilen text.

    Hier soll nun die Zeile mit dem Inhalt "%LDP*%" ersetzten werden durch eine Zeile "%LDP*%" und darauf folgend die Zeilen, welche in der txt datei stehen.

    Leider geht es so nicht ganz :(
     
  14. #13 tw-elektric, 27.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    hat mir jmd einen tipp, wie ich dies hinbekomme?
    konnte bis jetzt keine lösung finden...
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Aqualung, 27.06.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Code:
    sed '/\%LDP\*\%/ r 610409.txt' file
     
  17. #15 tw-elektric, 30.06.2008
    tw-elektric

    tw-elektric Eroberer

    Dabei seit:
    07.12.2007
    Beiträge:
    63
    Zustimmungen:
    0
    danke, habe es nun gelöst. falls jmd interesse hat, hier mal das komplette script:

    Code:
    #!/bin/csh
    set echo
    
    #Nutzengröße herausfinden
    grep X355000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610355
    endif
    
    grep X409000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610409
    endif
    
    grep X457000D01 /home/ottbe/Desktop/test.ger > /dev/null
    if ( $status == 0 ) then
    set nutzen = 610457
    
    echo "### Es wurde die Nutzengröße "$nutzen" erkannt ###"
    endif
    
    sed "1s/\*/G04 MEASURE T\'circle\' D2.00 I0 S0 \*/" /home/ottbe/Desktop/test.ger > /home/ottbe/Desktop/test2.ger
    echo "### Die 1. Zeile wurde erfolgreich ersetzt ###"
    
    sed -e "s/\%IPPOS\*\%/\%ADD15C,2.005\*\%\n\%ADD15C,2.006\*\%\n\%IPPOS\*\%/g" /home/ottbe/Desktop/test2.ger > /home/ottbe/Desktop/test3.ger
    echo "### Die zwei Zeile wurde erfolgreich eingefügt ###"
    
    awk -v out="/produktionsdaten/Ritzdaten/GERBER/Messpunkte/"$nutzen".input" '{ print >> "test4.ger" } /%LPD\*%/ { while (getline < out){ print >> "test4.ger"; }}' /home/ottbe/Desktop/test3.ger
    echo "### Die Zeilen aus der Nutzendatei wurden eingefügt ###"
    

    Gruß
    TW-elektric
     
Thema:

Inhalte in Datei einfügen

Die Seite wird geladen...

Inhalte in Datei einfügen - Ä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. Inhalte in einer Datei suchen und Dateiname ausgeben

    Inhalte in einer Datei suchen und Dateiname ausgeben: Hallo zusammen, ich bin ein ziemlicher Perl Neuling und habe ein Problem das ich mit Perl lösen möchte. Ein Programm schreibt in das...
  3. Dateiinhalte multiplizieren

    Dateiinhalte multiplizieren: Hallo, ich möchte gern die Inhalte mehrerer Datein multiplizieren und das Ergebnis in eine Ergebnisdatei schreiben lassen. Beispiel:...
  4. 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...
  5. Ausgabe von dateiinhalten

    Ausgabe von dateiinhalten: Hallo, ich habe folgendes Problem: Ich möchte gerne aus Logfiles verschiedene Informationen exportieren. Dummerweise sind die Spalten nicht von...