Inhalte in Datei einfügen

T

tw-elektric

Eroberer
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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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

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.
 
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.

Code:
#!/bin/csh
head -1 $1  | grep '*' > /dev/null
if ( $status == 0 ) then
   echo "Stern"
endif



2.) Prüfen ob in der zweiten Zeile ein "%FSLAX33Y33*%"

Code:
#!/bin/csh
head -2 $1 | tail -1  | grep '%FSLAX33Y33\*\%'  > /dev/null
if ( $status == 0 ) then
   echo "%FSLAX33Y33*%"
endif

To be continued ...
 
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
 
3.)
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

AFAIK ist das nur in bash möglich. In csh z.B. backquotes d.h.

Code:
set ergebnis = "`grep foo bar`"
 
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
 
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
 
Zuletzt bearbeitet:
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.
 
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
 
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 :(
 
Zuletzt bearbeitet:
hat mir jmd einen tipp, wie ich dies hinbekomme?
konnte bis jetzt keine lösung finden...
 
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
 

Ähnliche Themen

Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

Server-Monitoring mit RRDTool

Zurück
Oben