修改文件中的某个字段和变量

问题描述:

我期待着修复数据库的格式,并允许用户输入他想在数据库中修改的确切字段,并使用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(第一场)输入他们想要修改的项目,并改变它的数量(第三场),然后将其乘以原始价格(第四场)以获得总数价格(第五场)。

非常感谢!很多帮助表示赞赏!

+0

澄清你的字段选项卡分隔的方式是一个问题。它只是为了向用户显示吗?如果是这样的话,你可以使用'column -s $'\ t'-t file',这样它就可以显示所有的字段对齐,而不会实际搞乱数据中的字段分隔。 –

我不确定你为什么反对制表符分隔的文件。这种用法似乎非常合适。

虽然如此但是,这里有一个快速的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 

这应该给从这里建立足够的方向。大毛的部分是:

  1. shell变量通过awk -v标志传入awk。
  2. 我们正在使用的-F标志
  3. 我们指定了我们需要的输出场单独也成为标签OFS=FS
  4. 我们正在测试的第一场,看看标签/t DELIM了分裂文件成田它是由用户输入的产品ID $1 == prodid
  5. 最后,我们将awk输出重定向回到tmp文件,然后将tmp文件移到现有的.cart文件的顶部。
+0

谢谢!我会用你的答案,看看它是否适合我的脚本。如果必须修改我的逻辑,但这是一个很大的帮助!非常感谢。 –