【发布时间】:2018-01-24 14:25:10
【问题描述】:
我创建了一个“模拟”银行系统的脚本,该系统允许用户根据需要检查余额以及取款或存款。有关客户、他们的余额等的详细信息保存在名为 data.txt 的文本文件中。当客户取款或存款时,应相应调整文本文件。问题是,像这样使用 sed
sed -i 's/$balance/$($balance + $depositval)/' data.txt
不起作用。我也尝试过 grep 但也没有运气。有没有办法使用 sed 将客户的余额更改为从他们的余额中产生的总和以及他们希望存入的金额(如果他们需要取款,则减去)并作为参数传递一个变量?
PS:这是我的data.txt文件的内容:
12345 Nick Abrams A 25575
67890 George Michaels I 10000
14680 Jack Jordan A 2960
13670 Michael Patton I 5065
第一个字段是客户的卡号。 A 和 I 指示客户的卡是活动的还是非活动的。第五个领域是平衡。顺便说一句,我正在使用 bash shell。使用 read 命令从键盘读取 depositval,使用 grep 从文本文件中找到余额。
为了将来参考,如果有人需要做类似的事情,我发现我第一次尝试像这样使用 sed
sed -i 's/$balance/$($balance + $depositval)/' data.txt
也可以,只需要将 ' 更改为 "
【问题讨论】:
-
sed不知道如何做算术。bash只处理整数,不处理浮点数。我建议你尝试使用编程语言来编写这个程序。 -
sed中绝对不支持算术运算。也不清楚您期望如何提取加法的值。 GNUsed中有一个奇怪的 hack,它允许您在替换部分中运行 shell 命令,但您确实应该使用不同的工具。 awk 在这种事情上很受欢迎,但你仍然需要弄清楚如何告诉 Awk 输入值(大概是通过解析输入行来找出 balance 的先前值和 depositval)。 -
感谢您的编辑。您还没有告诉我们如何为 depositval 设置一个值。
-
@tripleee 更新了我的问题。我希望我能让我更容易理解我想要做什么。