Shell programmierung / Arrays?

Doch es schon....

Code:
 XML_PATH=/usr/local/src/rrd2xml/xml
 RRD_PATH=/var/lib/ntop/rrd/interfaces/eth0
 
 i=1
 MYFILES=`ls $RRD_PATH -fl -1 | grep rrd | awk -F' ' '{print $9,$10}'`
 FILECOUNT=`echo $MYFILES | awk -F' ' '{print NF}'`
 
 while ! [ $i -gt $FILECOUNT ]
 do
    MYARRAY[$i]=`echo $MYFILES | awk -F' ' '{print $'"$i"'}'`
    echo "${MYARRAY[$i]}"
    i=`expr $i + 1`
 done

Was ich nicht verstehe sind die vielen ' bei awk -F' ' '{print $9,$10}'

mfg
JackY
 
Oh cool.... -F steht für das Trennzeichen .... damit hab ich jetz auch das problem mit den leerzeichen gelöst :)

Ähm gibts nen befehl wie ich mir alle zeichen bis auf die letzten 3 stellen aus einem string ausgeben lassen kann.... oder wie ich die dateierweiterung ersetzen kann?


Thx JackY
 
Hi auch das sollte ohne Probleme folgendermaßen gehen,
mit hilfe von Stringsubstitution:

Code:
WORD=groove.mp3
echo ${WORD: 0 : `expr length $WORD`-3} # schreibe von Zeichen 0 bis zum dritt letzten(wortlänge -3 ) auf stdout

Gruß

RedWing
 
Antrag zu den vielen Hochkommas im awk:

Code:
awk -F' ' '{print $'"$i"'}'`

$i ist ein Shell Variable, diese kann man durch einbettung in '"$SHELLVARIABLE'" an
das bzw dein awk Skript weiterleiten ;-)

Gruß

RedWing
 
Hab noch ne einfache variante gefunden die files auszulesen:
Code:
MYFILES=`ls -A1B | grep .txt`

oder:
Code:
MYFILES=`ls -A1B | grep .txt | awk '{print "|"}'`

Das letzte ist da um einen zeichen zum späteren schneiden des strings einzubauen.
Wobei ich immer noch das problem mit dem schreiben des Arrays habe :confused:

Das zählen über:
Code:
FILECOUNT=`echo $MYFILES | awk -F'|' '{print NF}'`

funktioniert super.... da bekomm ich 66 dateien raus gezählt.
aber:
Code:
MYARRAY[$i]=`echo $MYFILES | awk -F'|' '{print $'"$i"'}'`
Da schneidet es mit das array so komisch.... ich bekomm am anfang der dateinamen ab und zu ein leerzeichen :eek:
 
Also das mit ls -A1B is auch ne Variaante ;)

Versuchs maal so:


Code:
MYFILES=`ls -A1B | grep pdf | awk '{ print $0 "|" }'`
FILECOUNT=`echo $MYFILES | awk -F'|' '{print NF}'`
i=1
while ! [ $i -gt $FILECOUNT ]
do
        MYARRAY[$i]=`echo $MYFILES | awk -F'|' '{print $'"$i"'}'`
        echo ${MYARRAY[$i]}
        i=`expr $i + 1`
done

Also bei mir funktionierts. Es stehen alle Dateien drin die ein "pdf " enthalten...

Gruß

RedWing
 
Genau. so hab ich mir das jetz zusammen gebastelt.

Beim einlesen über ls und das anhängen von | wird jeweils ein leerzeihen dazwischen gesetzt.da ich aber nicht nach leerzeichen spliten kann, wird nach dem einlesen in das array das leerzeichen mit übernommen.

"IGMP.txt | IP_ DynamicPortsBytes.txt | IP_ IRCBytes.txt" [...]

wenn ich jetz das array auslese sieht das so aus:

Code:
IGMP.txt 
    IP_ DynamicPortsBytes.txt 
    IP_ IRCBytes.txt 
    [...]
Vorn und hinten sind jeweils leerzeichen. Einfach wär ein replace.... geht nicht, da die dateinamen leerstellen enthalten :-(

Ich hab nur kein plan wie ich das rausschneiden kann (vorn + hinten)


Gruss JackY
 
Hallo....

ich hab ma noch ne kleine frage ;)

Hab folgenden code:
Code:
INHALT=${MYARRAY[$i]}
  
  MYTXT1=${MYARRAY[$i]: 0 : 1}
  MYTXT2=${MYARRAY[$i]: 0 : `expr length $INHALT`-1}
Vom Syntax ist das ohne fehler.
Aber beim ausführen kommt fehler: `expr length $INHALT`-1: substring expression < 0
Wenn ich die Variable INHALT mit normalem text fülle, funktioniert das script.
Was mach ich verkehrt?
 
Hi,
wenn der Fehler kommt heißt das wohl das in $INHALT nix drin ist und du somit versuchst auf
einen Index zuzugreifen(-1) den es nicht gibt.

Du solltest bevor deiner string substitution abprüfen ob $INHALT auch die nötige
Länge besitzt die du für die Substitution benötigst...

Gruß

RedWing
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück