假设我有文件FirstDB.txt
并且已填充。随着格式
产品编号:产品名称:数量:价格:DateRegistered
例如:
cat FirstDB.txt
0001:Fried Tarantula:15:100:2017-08-27
0002:Wasp Crackers:18:25:2017-08-27
0003:Century Egg:19:50:2017-08-27
0004:Haggis Flesh:20:90:2017-08-27
0005:Balut (Egg):85:15:2017-08-27
然后我有一个由名为.cart的用户生成的文件,并且它的格式也已填充 productID productName Quantity IndividualPrice TotalPrice
cat .cart
0001 Fried Tarantula 5 100 500
0003 Century Egg 7 50 350
0005 Balut (Egg) 6 15 90
我想根据用户购买或选择的内容更新FirstDB.txt
产品数量。考虑到我上面的两个文件,我想要发生的是这个输出:
cat FirstDB.txt
0001:Fried Tarantula:10:100:2017-08-27
0002:Wasp Crackers:18:25:2017-08-27
0003:Century Egg:12:50:2017-08-27
0004:Haggis Flesh:20:90:2017-08-27
0005:Balut (Egg):79:15:2017-08-27
我只想知道切割.cart
的第一列并使用grep $(cat .cart)
获取我需要的行然后切割.cart
的第三列以获取数量然后减去它到FirstDB.txt
的第三列,但似乎我无法得到我想要的输出。我也在考虑在sed -i
上使用FirstDB.txt
但尚未尝试过。有帮助吗?非常感谢!
答案 0 :(得分:1)
sed只是简单地做s / old / new /,就是这样。你不是简单地做s / old / new /所以你不应该考虑使用sed。只需使用awk,即使你现在必须学习它......
$ cat tst.awk
NR==FNR { a[$1] = $(NF-2); next } # save a["0001"]=5, etc from cart
FNR==1 { FS=OFS=":"; $0=$0 } # split FirstDB by ":"s instead of spaces
{ $3 -= a[$1]; print } # when $1=="0001" set $3 to $3-a["0001"]
$ awk -f tst.awk cart FirstDB.txt
0001:Fried Tarantula:10:100:2017-08-27
0002:Wasp Crackers:18:25:2017-08-27
0003:Century Egg:12:50:2017-08-27
0004:Haggis Flesh:20:90:2017-08-27
0005:Balut (Egg):79:15:2017-08-27