147347
Jan 19, 2021
991
3
0
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.
Please also mark the comments that contributed to the solution of the article
Content-Key: 642058
Url: https://administrator.de/contentid/642058
Printed on: April 23, 2024 at 06:04 o'clock
3 Comments
Latest comment