
147347
19.01.2021
Cvs Datei mit ISBN Rechnung
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 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.
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 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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 642058
Url: https://administrator.de/forum/cvs-datei-mit-isbn-rechnung-642058.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
3 Kommentare
Neuester Kommentar