PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei einlesen weiter verarbeiten...



cengiz
26.07.2005, 12:01
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* ]
...

pengo
26.07.2005, 13:10
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

cengiz
26.07.2005, 13:31
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

pengo
26.07.2005, 13:36
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?

cengiz
26.07.2005, 13:41
cat $TMPFILE | while read zeile
do

fp=`echo $zeile | head -c 2` = "FP"`

if [ $fp = "FP" ] ; then
echo $fp
; fi
done

pengo
26.07.2005, 13:50
#!/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

cengiz
26.07.2005, 13:59
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

pengo
26.07.2005, 14:11
#!/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

cengiz
27.07.2005, 06:25
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?

cengiz
27.07.2005, 18:03
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