bash script - string edit

hakkinen

hakkinen

Grünschnabel
Hi Forum

ich knabbere schon ettliche Stunden an folgendem Problem:
Folgender Dateiinhalt soll so zusammengesetzt werden, daß jede einzelne Zeile mittels Variable an einen Befehl weitergegeben werden kann.
Vorab schon mal danke fürs helfen: Danke!

z.B.
str=ABC100_1006_CW32_Upper_02.02.00
oder z.B.
str=XYZ310_1006_CW28

------------------------------------------------
Location Prases:
XYZ300_1006_CW22 (1.5)
ABC100_1006_CW22_001 (1.6)
XYZ310_1006_CW28 (1.8)
LMN750_3007_CW52 (9.8)
ABC100_1006_CW32_Upper_02.02.00 (1.6.1.3)
XYZ310_1006_CW32_C05_02.00.00 (1.8.1.2)
-------------------------------------------------

Mein Versuch :-((
------------------------------
#!/bin/bash
str1=" CBB100_5004_CW37_C11_02.03.00 (1.6.1.4)"
str2=${str#*(}
echo $str2
len1='expr length $str1
echo $len1
len2='expr length $str2'
len3='expr $len1-$len2'
x=$(str1:4:len3)
echo $x
------------------------------
 
Hallo
Sorry, aber ich kann beim besten Willen nicht nachvollziehen, was du eigentlich willst.
Gib bitte nochmal eine Datenprobe, und was du daraus filtern willst.
Was dein Scriptversuch da machen will, erschließt sich mir beim besten Willen nicht.
Um eine Datei zeilenweise zu verarbeiten, gibt es etliche Möglichkeiten in der Shell.
Vom einfachen grep über read bis zu sed, awk und Perl.

Gruß Wolfgang
PS Versuch bitte nochmal dein Problem genau zu analysieren. Oft hilft das sogar für eine eigene Lösung.
 
Also ich habs so verstanden, dass er die Datei zeilenweise einlesen möchte und den Zeileninhalt an einen Befehl übergeben.
Was das Skript allerdings machen soll erschließt sich mir auch nicht.
 
Also eine Datei zeilenweise lesen geht ja einfach mit while read.
Code:
while read $zeile;
 do
echo $zeile
# do some with $zeile
done <inputdatei
Gruß Wolfgang
 
Du willst jede Zeile der Datei in eine Variable einlesen?

Code:
#!/bin/sh

parsefile () {
  awk '
    function p(varname,val)
      { printf "%s=\"%s\"\n",varname,val }
    BEGIN { FS = " = "; i = "0" }
    !/^Location/ { p("STR["i++"]", $0); }
    END { p("LIMIT", i) }
  ' < ./test.txt
};

eval $(parsefile);

for (( i=0; i < LIMIT; i++ )); do
  echo "${STR[$i]}";
done;
(ungetestet!)
 
Mhh... erst mal danke für die versuche mich zu verstehen :-)
Also mein Problem!
Datei mit folgendem Inhalt:
-----------------------------
XYZ300_1006_CW22 (1.5)
ABC100_1006_CW22_001 (1.6)
XYZ310_1006_CW28 (1.7)
LMN750_3007_CW52 (9.7)
ABC100_1006_CW32_Upper_02.02.00 (1.6.1.3)
XYZ310_1006_CW32_C05_02.00.00 (1.8.1.2)
--------------------------------------------
davon möchte ich die Klammern incl. Klammerninhalt weghaben!

Gruß hakkinen
 
Huch, das is ja ganz was anderes ...

Code:
sed -i 's% (.*)$%%' datei.txt
 
Zuletzt bearbeitet:
Hi,

Falls Du doch noch bei Deiner Variablen-Methode bleiben möchtest, wäre mein Vorschlag z. B.:

Code:
unset counter
while read information rest; do
 (( counter++ ))
 str[$counter]="$information"
done < /path/to/inputfile
echo "Variablen str[1-$counter] gesetzt."

 ### Zur Ueberpruefung Ausgabe der Variablen:
for (( newcounter=1; newcounter<=$counter; newcounter++ )); do
 echo "str[$newcounter]=\"${str[$newcounter]}\""
done

Der obere Teil zählt mit jeder vorkommenden Zeile hoch und verwendet dies als Nummerierung der fortlaufenden Variable str[...]. Der jeweiligen Variable wird dann der Wert des ersten mittels read ermittelten Zeilenabschnittes der jeweiligen Zeile zugewiesen.

Gruß Daniel
 
Zuletzt bearbeitet:

Ähnliche Themen

variable in sed verwenden

Variable mittels regex überprüfen

Probleme mit Shell-Script (Listen, Strings, etc.)

Abschneiden eines Strings im Script.

Server-Monitoring mit RRDTool

Zurück
Oben