Cvs Datei mit ISBN Rechnung

Mitglied: 147347

147347

19.01.2021 um 14:10 Uhr, 517 Aufrufe, 3 Kommentare

Hallo.
Ich muss mithilfe eines Shellscriptes in einer cvs Datei auf eine jeweilige Spalte zugreifen. In diesem Fall die Spalte wo die ISBN Nummern stehen.

Die Aufgabe lautet:
Es sollen alle in der Datenbank eingetragenen ISBNs geprueft werden. Diese sind ¨entweder zehn- oder dreizehnstellig und durfen nur Ziffern enthalten (Ausnahme: die letzte Stelle der zehnstelligen ISBN kann ein ’X’ enthalten, das der 10 entspricht) Bindestriche sind zu ignorieren. Fur jede zehnstellige ISBN mit den ¨Ziffern z0z1z2...z9 pruefen Sie bitte, ob folgende Bedingung wahr ist: ¨ z0 + 2z1 + 3z2 + 4z3 + 5z4 + 6z5 + 7z6 + 7z7 + 9z8 + 10z9 mod 11 = 0
Bei Verletzung dieser Bedingung geben Sie die fehlerhafte ISBN mit einer deskriptiven Fehlermeldung aus, genauso bei falscher Groeße oder falschen Ziffern.

Die ISBN mit falscher Groeße oder falschen Ziffern konnte ich ausgeben. Jedoch macht mir die modulo prüfung probleme, da ich nicht gebnau weiß wie ich auf die einzelnen Stellen der Zahlen zufgreifen kann.

Mein derzeitiger Code lautet:

if [ "$1" = "isbn" ] && [ "$2" = "" ]; then

isb1="[0-9]{10}"
isb2="[0-9X]"
isb3="[0-9]-[0-9]{2,3}-[0-9]{5,6}-[0-9]" # Alle regulären Ausdrücke für die ISBN
isb4="[0-9]{3}-[0-9]-[0-9]{6}-[0-9]{2}-[0-9]"
isb5="[0-9]{13}"
isb="$isb1|$isb2|$isb3|$isb4|$isb5"

let1="[A-W][Y-Z]"

echo "Error: fehlerhafte ISBN:";

isbn="$isb1|$isb2|$isb3"

awk -v nr=$isb -v b=$let1 -F ';' '{if( $8 ~ nr && length($8)!=10 && length($8)!=13 || $8 ~ b) {print $8}}' bib.csv # ISBN falscher Länge und Zeichen augegeben

awk -v nu=$isbn s=0 -F ';' '{
for (i=1; i<=10; i++) { if(i==1) sum=0
if($i == "X" ){ sum=sum+(10i)}
else { sum=sum+($ii) }
if( sum%11!=0 && i==10 && $8 ~ nu && length($8)==10) {print substr($8,i,1)}}}' bib.csv

Mit substr will ich jede einzelne Ziffer "ausschneiden". Aber ich bekomme den Fehler: awk: fatal: cannot open file `-F' for reading.
Wo liegt der Fehler? oder gibt es noch einen besseren Ansatz?
Entschuldigung für die Formatierung und Vielen Dank im Voraus.
Mitglied: 147347
147347 (Level 1)
19.01.2021 um 14:17 Uhr
Ergänzung: die * Zeichen wurden nicht kopiert bei den i's

Also: sum=sum+(10*i)
und sum=sum+($i*i)
Bitte warten ..
Mitglied: brammer
19.01.2021, aktualisiert um 14:29 Uhr
Hallo,

setzte den Code bitte mal in Code Tags.
Links neben dem Beitrag sollte die
Option "Codeblock hinzufügen" sein

brammer
Bitte warten ..
Mitglied: 147347
147347 (Level 1)
19.01.2021 um 14:50 Uhr
Bitte warten ..
Heiß diskutierte Inhalte
Linux
Installation Grammm Server
smeclntVor 1 TagFrageLinux13 Kommentare

Hallo zusammen, meine Linux Kenntnisse sind sehr rudimentär trotzdem suche ich eigentlich ständig nach einer Alternative zu MS Exchange. Bis jetzt gab es nichts ...

Switche und Hubs
Probleme im Netzwerk Switche teilweise nicht erreichbar
hukimanVor 9 StundenFrageSwitche und Hubs29 Kommentare

Guten Morgen, seit Monaten haben wir hier immer wieder Probleme mit dem Netzwerk, das Problem konnte ich leider aber noch immer nicht finden. Es ...

Erkennung und -Abwehr
Einer Malware auf der Spur. Benötige Sherlock Holmes!
streamVor 21 StundenFrageErkennung und -Abwehr6 Kommentare

Guten Abend Wenn ich meine Windows-10-Kiste starte, so gibt mir mein Router eine Meldung aus, dass eine bestimmte IP-Adresse wegen Bösartigkeit geblockt wurde. Auf ...

Windows 10
Windows 10 interes Mikro ohne Funktion
TPH125Vor 1 TagFrageWindows 1011 Kommentare

Hallo zusammen, Ich verzweifelt bald. Besitze einen Medion Akoya MD 97110. Habe Windows 10 installiert, seit dem funktioniert das inigrierte Mikrofon nicht mehr. Gerät ...

Batch & Shell
Tabellarische Ausgabe der Netzwerkschnittstellen
gelöst dysti99Vor 8 StundenFrageBatch & Shell18 Kommentare

Mit - ip a - werden ja die Netzwerkschnittstellen angezeigt. Ich möchte mit ein Batchscript folgende Ausgabe erreichen: 1 eth0 192.168.1.1 AD:13:67:56:14:D1 2 eth1 ...

Festplatten, SSD, Raid
(USB) Festplatten laut ?
TomEngelVor 1 TagFrageFestplatten, SSD, Raid6 Kommentare

Ich grüsse Sie Alle. Eine Frage eines engagierten Laien Habe mehrere 3,5 " Festplatte. Einige schon recht alt 8 Jahre, andere ca 2-3 jahre ...

Ubuntu
Mailserver Test Provider IP
gelöst it-blzVor 1 TagFrageUbuntu9 Kommentare

Hallo, ist es möglich einen "Mailserver" (Imap + smtp) in einer Virtual Box mit einer Provider IP (dynamisch - ist allerdings konstant) zu testen? ...

Linux Netzwerk
SAMBA FS Portfreigabe
Jannik2018Vor 23 StundenFrageLinux Netzwerk17 Kommentare

Hallo zusammen, ich habe eine Portfreigabe für meinen SAMBA Server mit Netzwerkfreigaben auf port 445 TCP eingerichtet allerdings wenn ich per DNS oder externer ...