Ich habe hier ein kleines Problem. Ich möchte Strings auslesen und zerlegen. Die Strings liegen Zeilenweise in einer Datei vor.
Auslesen geht ja relativ einfach:
Code: Alles auswählen
FILE=$1
while read LINE
done <$FILE
Beispiel:
A00A 123456789
In einer Zeile stehen mehrere Kennbuchstaben hintereinander:
A011 1234567890123456 B012 12345678901234567
Das kann ich ja einfach so zerlegen:
Code: Alles auswählen
#!/bin/bash
datum_scriptstart=$(date +%Y-%m-%d--%H-%M-%S)
FILE=$1
tickets_num=0
while read LINE
do
let "tickets_num=$tickets_num+1"
ticket_a_indicator=${LINE:0:1}
ticket_a_length_hex=${LINE:1:3}
ticket_a_length_dec=$(echo $((16#$ticket_a_length_hex)))
ticket_a=${LINE:0:$ticket_a_length_dec+5}
LINE=${LINE:ticket_a_length_dec+5}
ticket_b_indicator=${LINE:0:1}
ticket_b_length_hex=${LINE:1:3}
ticket_b_length_dec=$(echo $((16#$ticket_b_length_hex)))
ticket_b=${LINE:0:$ticket_b_length_dec+5}
echo Ticket A:.$ticket_a.
echo Ticket B:.$ticket_b.
done <$FILE
datum_scriptende=$(date +%Y-%m-%d--%H-%M-%S)
echo "Scriptstart: " $datum_scriptstart
echo "Scriptende: " $datum_scriptende
exit 0
Nur leider ist die Reihenfolge nicht fest, auch nicht jeder Eintrag muss vorkommen. Dafür können manche Einträge mehrmals vorkommen (max 2 mal). Die Felder selbst sind fest (z.B. A, B und C wobei C doppelt vorkommen kann.
Das wäre genau so richtig als Eingabe:
B012 12345678901234567 A011 1234567890123456 C012 12345678901234567
wie auch:
B012 12345678901234567 C012 12345678901234567 A011 1234567890123456 C010 123456789012345
Mir schwebt da irgendwie eine weitere while-Schleife vor habe aber keinen Plan, wie ich das umsetzen soll. Letztendlich will ich A, B und C1+C2 in einzelnen Variablen haben und von dort weiter verarbeiten.
Hat jemand eine Idee?