Wenn Sie nicht in eine echte SQL-Datenbank wechseln möchten und das Ergebnis vorübergehend nicht gespeichert werden kann, müssen Sie sicherstellen, dass Sie nicht gleichzeitig SELECT und UPDATE in derselben Tabelle ausführen.
Siehe die LIMIT- Direktive für SELECT.
so würden Sie so etwas tun:
line=x while [ -n "$line" ] do line=$(sqlite3 database.db "select NUMBER from table WHERE STATUS = 'N'" LIMIT 1) SELECTION=$(echo $line | awk -F'|' '{ print $1 }') [some magic]™ sqlite3 database.db "update table SET STATUS='Y' WHERE NUMBER='$SELECTION'" done
Dies würde dazu führen, dass SELECT immer nur ein Ergebnis und ein Ergebnis zurückgibt, das Sie dann bearbeiten und UPDATE ausführen und SELECT erneut ausführen würden, um das nächste Ergebnis zu erhalten (da sich STATUS geändert hat, würde SELECT den nächsten Wert erhalten, nicht den alten, da er nicht mehr mit "N" übereinstimmt.) )
oder vielleicht können Sie "etwas Magie (tm)" über SQL anstelle einer Shell ausführen, um die gesamte Arbeit in die SQL-Engine zu verlagern ...