2017-08-30 14 views
-1

我期待着修復數據庫的格式,並允許用戶輸入他想在數據庫中修改的確切字段,並使用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',這樣它就可以顯示所有的字段對齊,而不會實際搞亂數據中的字段分隔。 –

回答

2

我不確定你爲什麼反對製表符分隔的文件。這種用法似乎非常合適。

雖然如此但是,這裏有一個快速的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

謝謝!我會用你的答案,看看它是否適合我的腳本。如果必須修改我的邏輯,但這是一個很大的幫助!非常感謝。 –