我问了一个类似的问题,但答案似乎给我带来了一些问题。我的总体目标是能够从特定数据库中删除特定记录。
databases.txt 包含:
class grades
schema.txt 包含:
grades name test1 test2 test3
class.db 包含:
Nick 79 84 85
You 24 83 52
Her 84 98 55
所需的输入是:
./del.sh class test2 84
我的目标是删除 test2 和 class 所属的 db 中任何带有“84”的行。
我使用以下方法验证数据库的存在:
awk '{ print $1 }' databases.txt >> temp.txt
if grep -Fxq $1 temp.txt
then
rm temp.txt
touch temp.txt
else
echo "Database name error. Exiting."
rm temp.txt
exit 1
fi
我当前的问题是验证 test2 属于属于用户输入的数据库的架构,如果该字段在该架构中不存在,则打印一条错误消息。
我之前得到的回复是:
awk 'NR==FNR{a[$1]=$0;next}a[$2]~/$2/{print $0}' schemas.txt databases.txt
但是,它似乎并没有真正正确检查,它会打印不必要的数据库文件。我删除记录的代码现在也有点糟糕:
var=$(grep -c $3 $1.db)
delrec=$3
echo "There were" $var "records deleted from the $1 database."
sed -i "/$delrec/d" $1.db