2017-06-19 39 views
-1

該程序將輸入文件作爲參數。該文件包含整個月份的數據。它包含每天的銷售數據,明顯由虛線分隔。將每天的數據(日期明智)保存在單獨的文件中,並比較該文件的總數

程序應該將每一天的數據(日期明智)保存在一個單獨的文件中。 我寫了一個需要所有內容的代碼。

它用不同的日誌文件存儲明智的內容,但我需要日期明智地存儲到不同的日誌文件。我怎樣才能做到這一點 ?任何建議?

awk -F' ' '{filename=$1".log";print>filename;close(filename)}' input_file 

這是輸入文件:

Date: 01-01-2007 
CPU  3 7098 22394 
Monitor 2 6500 13000 
Mouse 20 300  6000 
Total: 41394 
--------------------------------------------------- 
Date: 04-01-2007 
Keyboard   10 700 7000 
Ethernet-Card 48 900 43200 
Total: 50020 
--------------------------------------------------- 
<again some data here …> 

而且,數據必須進行協調(比較)來查看所有的計算是否都很好,沒有數據被篡改,也就是說,它應該通過再次總量添加文件中存在的單個項目價格。當總數不匹配時,它應該在日誌文件中寫入一條錯誤消息,清楚地說明哪一天的數據存在問題。 這是我的代碼,如下所示: awk'NF & & NR> 1 & & $ 0!〜/ total:/ {r = $ 2 * $ 3; V =(V!= 「」)? v「+」r:r; if(r!= $ 4){things_er [$ 1] = r「而不是」$ 4「err_t + = $ 4;噸+ = R; $ 4 = r} 但它不是打印錯誤消息,也不能確定其正確比較總數。

+0

它仍然給你發佈inpu噸文件片段 – RomanPerekhrest

+0

這是輸入的文件:日期:2007年1月1日 CPU 監視器2 6500 13000 鼠標20 300 6000 總計:41394 ------------- -------------------------------------- 日期:04-01-2007 鍵盤以太網卡48 900 43200 合計:50020 ------------------------------------ --------------- <在這裏再次輸入一些數據...> – Sylvester

+0

不在註釋中 - 移動到問題並應用格式 – RomanPerekhrest

回答

1

AWK溶液到每個Date部分到不同的文件存儲:

awk '/^Date:/{ fn=$2".log" }!/--/{ print > fn }' input_file 
  • /^Date:/{ fn=$2".log" } - 在遇到Date圖案線 - 建立文件名fn在形式例如01-01-2007.log

  • !/--/ - 跳過 「破折號」 線


結果(2日):

> cat 01-01-2007.log 
Date: 01-01-2007 
CPU  3 7098 22394 
Monitor 2 6500 13000 
Mouse 20 300  6000 
Total: 41394 

> cat 04-01-2007.log 
Date: 04-01-2007 
Keyboard   10 700 7000 
Ethernet-Card 48 900 43200 
Total: 50020 
相關問題