Datei einlesen weiter verarbeiten...

C

cengiz

Grünschnabel
Hallo,

ich habe eine Datei mit folgenden INhalt
Code:
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

Code:
if [ $fp = "FP*" ] ; then
KOMMANDOS
;fi 

if [ $fp = $regex* ]
...
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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?
 
Code:
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
 
Zuletzt bearbeitet:
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
 
Code:
#!/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

Code:
cat $TEMPFILE | awk '{print(substr($1,1,2))}'

so gibt er mir die ganzen zeilen der ersten spallte mit 2 Zeichen aus :D
 
Zuletzt bearbeitet:
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 :)
 
Hi!

Ist sowas für deine Zwecke ausreichend?

Code:
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
 

Ähnliche Themen

Doppelte Dateien löschen.

Datei in shellscript Zeilenweise einlesen

'xml Parser' in bash

Löschroutine mit Überprüfung

rsync: Quelle größer als Ziel => "Archiv" aufteilen/splitten

Zurück
Oben