【发布时间】:2020-10-26 01:17:01
【问题描述】:
我正在大学学习 Bash 脚本,但在创建替换行的功能时遇到了问题。 我在这里要做的就是允许用户在菜单上选择一本书,并将选择存储在数据库中,之后用户应该能够选择新的库存值,然后程序应该找到该行并将其替换为与新股票价值的另一行。 库存存储在文件的第五列。数据库中的数据是这样组织的:
1:O_Mágico_de_Auschwitz:19,80€:José Rodrigues dos Santos:69:2020
addStock(){
awk -F: '{print $2 " " $5}' baseDados.txt > output.txt
ar=($(cat output.txt))
escolhaLivro=$(dialog --stdout --title "Add Stock" --menu "Livros" 0 0 0 "${ar[@]}" )
echo ${escolhaLivro}
uservalue=$(dialog --stdout --title "Add Stock" --inputbox "Escreve o stock desejado: " 0 0)
nrLinha=$(grep -n "$escolhaLivro" $file | cut -d: -f1)
#this two lines are the ones causing the problems...I cant understand bash quotation
newValue=$(grep "$escolhaLivro" $file | awk -F: 'BEGIN {OFS=":"} $5=$uservalue')
sed -i "$nrLinha s/.*/$newValue/" $file
}
【问题讨论】:
-
请查看How to create a minimal, reproducible example,然后返回并相应地更新您的问题;特别是,提供 baseDados.txt 的内容、您的代码生成的错误和/或不正确的输出,以及(正确的)预期输出
-
你会很好地阅读和审查:stackoverflow.com/tags/bash/info。搜索“在询问有问题的代码之前”和“如何将糟糕的脚本变成好问题”。祝你好运。
-
本练习的目的是解决所述问题,还是使用示例代码中包含的工具 (
awk, cat, sed, grep ...)?可以使用awk生成更好的问题解决方案,但这也不是干净的,因为只有最新的awks 有--inplace-edit选项(不是确切的名称)。祝你好运。 -
缺少对
$file的引用...(但希望我猜到了它的正确值) -
搜索
[awk] in place edit时查看结果。祝你好运。