修改文件中的某个字段和变量
我期待着修复数据库的格式,并允许用户输入他想在数据库中修改的确切字段,并使用sed修改所述数量。进一步解释困境。修改文件中的某个字段和变量
比方说,我有一个名为.cart
一个隐藏的文件,其中包含
0011 Fish Tuna Eyeballs 2 80 160 0023 Fugu Fish Cream 3 360 1080 0035 Human Hair 5 2000 10000 0033 Stargazey Fish Pie 7 270 1890
第1场是产品ID,第二场是名字,第三是数量,第四是它的原价和第5是总价
第一个问题:我有格式化的麻烦。所有5列都以\ t作为分隔符粘贴在一起,如果您可以注意到第二行和第三行的错位,这是由于项目名称造成的。我想解决这个问题,但我不知道从哪里开始。缩短项目名称不是可能的选项。 (我在这里有问题,可能是因为我无法格式化粘贴的项目?)
第二个问题:我想允许用户输入选择,他们想通过
修改我可以很容易地做到这一点有什么项目read -number cat .cart | grep $number > .modifyme
然后给我们一个叫做.modify me的隐藏文件,我们将在第三个问题上进行处理。
第三个问题:通过再次允许用户输入来确定它将要更改的内容,修改它的数量(即第三个字段)。
现在,我们有.modifyme
,只是假设,在第二个问题的用户输入是0023这让我们的.modifyme
内容是:
0023 Fugu Fish Cream 3 360 1080
我想再次允许用户用他们输入的输入修改数量(第三栏)。
我很乐意为解决上述三个问题提供任何建议。这里重要的是允许用户通过产品ID(第一场)输入他们想要修改的项目,并改变它的数量(第三场),然后将其乘以原始价格(第四场)以获得总数价格(第五场)。
非常感谢!很多帮助表示赞赏!
我不确定你为什么反对制表符分隔的文件。这种用法似乎非常合适。
虽然如此但是,这里有一个快速的3行脚本,将产品ID从用户,数量从用户,并更新文件(第3和第5)柱用awk:
#!/bin/bash
#get the product id
read -p "Product ID: " productid
#get the new price
read -p "Qty: " qty
#update the record in the file
awk -F"\t" -v "prodid=$productid" -v "qty=$qty" 'BEGIN{OFS=FS} $1==prodid { $3=qty; $5=(qty * $4) }{print $0}' .cart > .cart.tmp && mv -f .cart.tmp .cart
这应该给从这里建立足够的方向。大毛的部分是:
- shell变量通过awk
-v
标志传入awk。 - 我们正在使用的
-F
标志 - 我们指定了我们需要的输出场单独也成为标签
OFS=FS
- 我们正在测试的第一场,看看标签
/t
DELIM了分裂文件成田它是由用户输入的产品ID$1 == prodid
- 最后,我们将awk输出重定向回到tmp文件,然后将tmp文件移到现有的
.cart
文件的顶部。
谢谢!我会用你的答案,看看它是否适合我的脚本。如果必须修改我的逻辑,但这是一个很大的帮助!非常感谢。 –
澄清你的字段选项卡分隔的方式是一个问题。它只是为了向用户显示吗?如果是这样的话,你可以使用'column -s $'\ t'-t file',这样它就可以显示所有的字段对齐,而不会实际搞乱数据中的字段分隔。 –