Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei einlesen weiter verarbeiten...
Hallo,
ich habe eine Datei mit folgenden INhalt
IPC00 zr1 Takt_01 Create Eintrag im Rhf.Plan
...
Diese Datei besteht aus zych Zeilen von solchen einträgen...
also ich kriege es hin die zeile aus zu lesen unfd auch nur den ersten parameter also in dem Fall "IPC00".
also ich möchte ein IF einbauen wenn der erste Parameter mit FP* anfängt soll er diese Zeile in eine HTML-Datei schreiben oder wenn die mit IP* anfängt...und so weiter...
wie gesagt ich kriege das mit IF nicht hin das ich ein WIldcard einsetzen kann dass er allles mit FP* filltern soll.
Könnt ihr mir helfen?
hab folgendes ausprobiert
if [ $fp = "FP*" ] ; then
KOMMANDOS
;fi
if [ $fp = $regex* ]
...
ich würde bevor ich die IF abfrage mache erst die eingabe einfach so zu recht stuzen das ich keine wIldcard brauch zb. mit head -c 2 oder mit grep
if [ `echo $string | head -c 2` = "IP" ]; so würde es gehen wenn man immer die ersten zwei buchstaben vergleichen will
oder if [ `echo $string | grep ^IP` ];
$string = ausgelesener string
ist villeicht nicht die schönste lösung aber müsst funktionieren
was meinst du mit ausgelesener $string...meisnt du die ganze zeile von der datei die ich auslese??
€
also wenn ich head anwende kommt die ausgabe keine Verzeichnis oder Datei
Ja die ausgelesen Zeile du muss ja dan ganz ihrgend wie in eine schleife habe oder so.
hast du head so angewendet wei im beispiel oder head -c string?
cat $TMPFILE | while read zeile
do
fp=`echo $zeile | head -c 2` = "FP"`
if [ $fp = "FP" ] ; then
echo $fp
; fi
done
#!/bin/bash
cat $TMPFILE | while read zeile
do
fp = $[ `echo $zeile | head -c 2` ]
fp=`echo $zeile | head -c 2`;
if [ `echo $zeile | head -c 2` = "FP" ] ; then
echo $fp;
fi;
done
und wenn das nicht geht
#!/bin/bash
cat $TMPFILE | while read zeile
do
fp=`echo $zeile | grep ^FP`;
if [ `echo $zeile | grep ^FP` ] ;
then
echo $fp;
fi;
done
bei dem zweiten beispiel kommt die fehlermeldung Dateiname[zeile]. zr6: unknown test operator und das sehrt oft
beim ersten komm diese fehlermeldung
2: Keine Datei und kein Verzeichnis
Dateiname[Zeile] : test: argument expected
und das auch sehr oft
#!/bin/bash
TEMPFILE="path";
cat $TEMPFILE | while read zeile
do
fp=`echo $zeile | head -c 2`;
if [ `echo $zeile | head -c 2` = "FP" ] ;
then
echo $fp;
fi;
done;
der code funktionier bei mir einwand frei das mit grep geht nicht weil es leider die ganze zeile ausgibt habe ich vergessen sorry ich schaue manch mal nicht richtig hin
pengo
Hallo,
so der COde klappt auch nicht.
2: Keine Datei und kein Verzeichnis
tmp2html[11] : test: argument expected
kommt diese Fehlermeldung.
also ich hab mir mal die freiheit genommen und die semikolons weggemacht die du rein gesetzt hast. also bei veriablen deklaration und bei der ausgabe denn ich meine die gehören nicht hin...wenn ich falsch liege korrigert mich
achja meine shell ist: ksh
€dit
ich hab mal ein bisschen rum gespielt und habe nun die zwei Buchstaben der erste Zeile "gefiltert" bekommen
cat $TEMPFILE | awk '{print(substr($1,1,2))}'
so gibt er mir die ganzen zeilen der ersten spallte mit 2 Zeichen aus :D
Wolfgang
27.07.2005, 17:26
Hallo
Ich hab hier zwar keine ksh, aber wenn ich aus einer Variablen nur die ersten beiden Zeichen filtern will, nutze ich folgendes:
Var="AB und noch mehr"
echo ${Var:0:2}
AB
Würd mich mal interessieren, ob sowas auch unter der ksh funktioniert.
Gruß Wolfgang
PS Gibt es einen Grund für die Nutzung der ksh?
Hi,
also damit alle bescheid wissen...ich mache ein Betriebspraktikum und die haben nun mal Unix (HP-UX) mit der Shell ksh
also deine Variante habe ich bei google auch gefunden aber die funktionierte nicht. die fehlermeldung kann ich dir im mom nicht sagen weil ich zuhause sitze. wenn du es wissen möchtest kann ich es morgen früh posten :)
neutrino1
01.08.2005, 11:35
Hi!
Ist sowas für deine Zwecke ausreichend?
cat $TMPFILE|while read;do
case $(echo ${REPLY}|cut -c1,2) in
IP)echo "Mach was mit ${REPLY}";;
FP)echo "Mach was anderes mit ${REPLY}";;
XY|AP)echo "Tu was bestimmtes mit ${REPLY}";;
*)echo "Dieser Code darf eigentlich nicht vorkomen";exit 1;;
esac
done
${REPLY} enthält die komplette Zeile
bei einem Zeilenanfang XY oder AF wird der selbe code ausgeführt (nur als Hinweis)
Kommt keiner der 4 genannten codes (IP,FP,XY,AP) am Anfang einer Zeile vor, dann bricht das script ab
Die Idee mit ${REPLY:0:2} ist gut, funktioniert aber zumindest mit der ksh88 nicht.
Ciao
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.