Grüß euch!
Ich habe von meiner Bank eine TAN-Liste bekommen, die die Zeilen A-M und Spalten 1-9 hat. In jedem Feld stehen mehrere Zeichen. Vor einer Online-Überweisung bekomme ich nun z.B: A2 C4 D1 - eben diese Zeichen aus den entsprechenden Feldern muss ich dann eingeben. Und da ich ein fauler Mensch bin, würde ich die Liste als csv digitalisieren und gpg-verschlüsselt ablegen. Dazu ein Skript basteln, dem ich den String "A2 C4 D1" hinwerfe und die benötigten Daten retour bekomme.
Zu Testzwecken habe ich mir nun folgende csv gebastelt:
0;1;2;3;4;5; A;a1;a2;a3;a4;a5; B;b1;b2;b3;b4;b5; C;c1;c2;c3;c4;c5; D;d1;d2;d3;d4;d5; E;e1;e2;e3;e4;e5;
Und folgendes Skript dazu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/bash output="" read -p "TAN eingeben: " tan for i in {1..3}; do field=$(echo ${tan} | awk -v x=${i} 'FS=" " {print $x}') letter=$(echo ${field} | cut -c 1 | tr '[:lower:]' '[:upper:]') number=$(echo ${field} | cut -c 2) #echo -e "\n $letter \n" if [[ $letter != [A-E] || $number != [0-9] ]]; then echo "Invalid TAN" exit 1 else awk -v nu=$((${number}+1)) -v le=${letter} -F ";" '{printf "%s",$le}' list.csv #edit: das endgültige Ziel wäre: #awk -v nu=$((${number}+1)) -v le=${letter} -F ";" '/^$le/ {printf "%s",$nu}' list.csv fi done #echo $output |
Das aktuelle Problem ist, dass die Übergabe von letter an awk nicht funktioniert. Laut echo in Zeile 11 sehe ich, letter pro Schleifendurchlauf je ein Buchstabe ACD ist, allerdings wird von awk (ohne Regex-Bedingung) die ganze .csv, also
0;1;2;3;4;5;A;a1;a2;a3;a4;a5;B;b1;b2;b3;b4;b5;C;c1;c2;c3;c4;c5;D;d1;d2;d3;d4;d5;E;e1;e2;e3;e4;e5;
ausgegeben. Könnt ihr mir einen Denkanstoss geben, wo mein Fehler liegt?
Falls ihr weitere Verbesserungsvorschläge habt, nur her damit! ☺